-1

私は何か奇妙なことに出くわしました、そして私はどこにも答えを見つけることができません。&=は偶数をfalseとして解釈するようです。これについて論理的な説明はありますか、それともこれはバグですか?

このスニペットは、少なくとも私の設定では、問題を再現しています。

$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

私があなたの質問を正しく理解していれば、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
于 2013-01-10T07:34:27.143 に答える
0

数値に対してビットごとの AND を実行しています。

2進数の数字は...

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

数値をインクリメントすると、最下位桁が常に変化することに注意してください。また、 と AND しているため、結果が( is )1であるため、偶数は false のように見えます。00000 & 10

于 2013-01-10T07:33:02.470 に答える