PHP中的位运算符

PHP中的位运算符,php,bit-manipulation,operator-keyword,Php,Bit Manipulation,Operator Keyword,我有以下代码: print "\n1 & 11\n"; var_dump(1 & 11); print "\n 2 & 222\n"; var_dump(2 & 222); 为什么第一个结果是1?为什么第二个结果是2 说明2&222(例如)应该返回一个布尔值: 例如,$a&$b==true计算等价性,然后计算按位and;而($a和$b)==true计算按位的值,然后计算等价性。” 我不明白,怎么可能2&222是2?&执行逐位和操作。也就是说,它对输入的所有位执

我有以下代码:

print "\n1 & 11\n";
var_dump(1 & 11);

print "\n 2 & 222\n";
var_dump(2 & 222);
为什么第一个结果是1?为什么第二个结果是2

说明
2&222
(例如)应该返回一个布尔值:

例如,$a&$b==true计算等价性,然后计算按位and;而($a和$b)==true计算按位的值,然后计算等价性。”


我不明白,怎么可能
2&222
2

&
执行逐位
操作。也就是说,它对输入的所有位执行
操作

二进制:

2       = 0000000010
222     = 1011011110
2 & 222 = 0000000010 ( = 2)
不要将
&
&
混淆
&
执行
按位AND
,而
&
执行
逻辑AND

2 && 222 = true
2 &  222 = 2
至于
1和11

1      = 0001
11     = 1011
1 & 11 = 0001 ( = 1)
所以,
1&11=1

进一步阅读:

以位为单位:

  • 01
  • 十,
  • 十一,
  • &
    运算符返回两个数字中设置为1的所有位。因此:

    • 1&2->01&10->00==0
    • 2&3->10&11->10==2

    单与是按位and运算符。
    您发布的引用告诉您在进行位操作和比较时应该注意。您可能会期望
    $a&$b==true
    测试某些位是否设置在$a中,但它等效于

    $a&(int)($b==true)

    由于在
    var_dump(1&11);
    var_dump(2&222);
    中不混合位操作和比较,所以这种注释不会打扰您。
    这是一个简单的按位的,如

    另请参见: