我有以下代码:
print "\n1 & 11\n";
var_dump(1 & 11);
print "\n 2 & 222\n";
var_dump(2 & 222);
为什么第一个结果是1?为什么第二个结果是2?
PHP Web site表示2 & 222
(例如)应该给我一个布尔值:
例如, $ a& $ b == true 评估等价,然后按位和;而 ($ a& $ b)== true 评估按位然后等效。“
我没理解,2 & 222
怎么可能2
?
答案 0 :(得分:5)
&
按位AND
。也就是说,它对输入的所有位执行AND
操作。
二进制:
2 = 0000000010
222 = 1011011110
2 & 222 = 0000000010 ( = 2)
请勿将&
与&&
混淆。 &
执行bitwise AND
而&&
执行logical AND
。
2 && 222 = true
2 & 222 = 2
至于1 & 11
1 = 0001
11 = 1011
1 & 11 = 0001 ( = 1)
所以,1 & 11 = 1
进一步阅读:
答案 1 :(得分:3)
位:
&
运算符返回两个数字中设置为1的所有位。所以:
答案 2 :(得分:0)
单个&符号是按位和运算符
您发布的引用告诉您在进行位操作和比较时应该了解operator precedence。您可能期望$a & $b == true
测试某些位是否设置在$ a中,但它等同于
$ a& (INT)($ B == TRUE)
由于您没有在var_dump(1&11);
或var_dump(2 & 222);
中混合使用位操作和比较,因此注意不应该打扰您。
这是一个简单的按位 - 正如https://en.wikipedia.org/wiki/Bitwise_operation#AND
另见:
http://docs.php.net/language.operators.precedence
http://docs.php.net/language.types.type-juggling