我有以下代码:
print "\n1 & 11\n";
var_dump(1 & 11);
print "\n 2 & 222\n";
var_dump(2 & 222);
为什么第一个结果是 1 ?为什么第二个结果是 2?
PHP 网站说(2 & 222
例如)应该给我一个布尔值:
例如,$a & $b == true评估等价然后按位与;while ($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?
PHP 网站说(2 & 222
例如)应该给我一个布尔值:
例如,$a & $b == true评估等价然后按位与;while ($a & $b) == true先求位,再求等价。”
没看懂,怎么2 & 222
可能2
?
&
按位做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的&
所有位。所以:
单个&符号是按位与运算符。
您发布的报价告诉您在进行位运算和比较时应该注意运算符优先级。您可能会期望$a & $b == true
测试是否在 $a 中设置了某些位,但它相当于
$a & (int)($b==true)
由于您没有混合位操作和比较,var_dump(1&11);
因此var_dump(2 & 222);
该注释不应该打扰您。
这是一个简单的按位操作,如https://en.wikipedia.org/wiki/Bitwise_operation#AND中所述
see also:
http://docs.php.net/language.operators.precedence
http://docs.php.net/language.types.type-juggling