web-dev-qa-db-ja.com

優先順位とビットマスク操作

(一見)非常に奇妙なケースに遭遇しました。

数2(0b10)および1(0b01

これは0b00は0と同等です。

ただし、ここでシュレーディンガー氏が登場します。

var_dump(0b10 & 0b01); // int(0)
var_dump(0b10 & 0b01 == 0); // int(0)
var_dump(0b10 & 0b01 != 0); // int(0)

ウィスキー。タンゴ。 Foxtrot。

私は、確かに、ビット単位の演算子に関しては最も鋭敏ではありません-おそらく、どこかで恐ろしく、恐ろしく間違っているのでしょうか?

ただし、Pythonでは:

0b10 & 0b01 == 0 = True

0b10 & 0b01 != 0 = False

...そう?

94
infomaniac

あなたは実際にこれをやっています:

var_dump(0b10 & (0b01 == 0));
var_dump(0b10 & (0b01 != 0));

試してください:

var_dump((0b10 & 0b01) == 0);
var_dump((0b10 & 0b01) != 0);
150
Matthew