我偶然发现了一些奇怪的事情,我无法在任何地方找到任何答案。 & =似乎将偶数解释为假。对此有合理的解释,还是这个错误?
此代码段会重现此问题,至少在我的设置中是这样:
$nums = array(1,2,3,4,5,6,7,8,9,10);
$var1 = true;
$var2 = true;
foreach ($nums as $num) {
// Test
$var1 &= $num;
$var2 = $var2 && $num;
echo "$var1, $var2<br />";
//Reset
$var1 = true;
$var2 = true;
}
系统:PHP版本5.3.10-1ubuntu3.4
答案 0 :(得分:5)
如果我正确理解您的问题,您会Bitwise AND (&
)与Logical AND (&&
)混淆。不,他们不一样。
如果检查数字的二进制表示,则最好理解按位运算。偶数/奇数会发生这种情况:
/* 1 & 0 */ 00000001b & 00000000b // 00000000b
/* 1 & 1 */ 00000001b & 00000001b // 00000001b
/* 1 & 2 */ 00000001b & 00000010b // 00000000b
/* 1 & 3 */ 00000001b & 00000011b // 00000001b
对于逻辑运算,您只需要查看操作数的真实性:
1 && 0 // false -- 0 is falsy
1 && 1 // true -- any non-zero number is truthy
1 && 2 // true
1 && 3 // true
答案 1 :(得分:0)
你正在对数字做一个按位和。
二进制数字是......
1 => 0001
2 => 0010
3 => 0011
4 => 0100
5 => 0101
6 => 0110
7 => 0111
8 => 1000
9 => 1001
10 => 1010
意识到当你增加数字时,最低有效数字总是在变化,并且由于你正在与1
进行AND运算,所以看起来偶数是假的,因为结果是0
(0000 & 1
是0
)。