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);
中不混合位操作和比较,所以这种注释不会打扰您。
这是一个简单的按位的,如
另请参见: