& =在偶数上产生错误

时间:2013-01-10 07:30:25

标签: php operators boolean variable-assignment

我偶然发现了一些奇怪的事情,我无法在任何地方找到任何答案。 & =似乎将偶数解释为假。对此有合理的解释,还是这个错误?

此代码段会重现此问题,至少在我的设置中是这样:

$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

2 个答案:

答案 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运算,所以看起来偶数是假的,因为结果是00000 & 10)。