-1

我偶然发现了一些奇怪的东西,我在任何地方都找不到任何答案。&= 似乎将偶数解释为假。对此是否有合理的解释,或者这是一个错误?

这个片段重现了这个问题,至少在我的设置中:

$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

4

2 回答 2

5

如果我正确理解了您的问题,那么您将 Bi ​​twise 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
于 2013-01-10T07:34:27.143 回答
0

您正在对数字进行按位与运算。

二进制数是...

1  => 0001
2  => 0010
3  => 0011
4  => 0100
5  => 0101
6  => 0110
7  => 0111
8  => 1000
9  => 1001
10 => 1010 

意识到当您增加数字时,最低有效位总是在变化,并且由于您正在与 进行与1运算,因此看起来偶数是假的,因为结果是0( 0000 & 1is 0)。

于 2013-01-10T07:33:02.470 回答