-4

ビット単位の操作を実行すると、Python で奇妙な動作が見られます

>>> bin(4)
'0b100'
>>> bin(9)
'0b1001'
>>> bin(9^4)
'0b1101'

上で、OR の予想される動作を確認します。数値は右側に配置され、各ビットが OR 演算されて結果が生成されます。ただし、私の意見では、2 つの同一の整数を OR すると、結果は常に 0 になるはずです。

>>> bin(9^9)
'0b0'

これはバグですか、それとも非常に奇妙な機能ですか? 誰でも説明できますか?

4

2 に答える 2

3

排他的または ( ^) を適用しています。通常のビット単位または ( ) を適用しようとしています|

Python Wikiから:

× | y

「ビットごとの論理和」を実行します。
出力の各ビットは、y の x AND の対応するビットが 0 の場合は 0、それ以外の場合は 1 です。

x^y

「ビットごとの排他的論理和」を実行します。
出力の各ビットは、y のビットが 0 の場合は x の対応するビットと同じであり、y のビットが 1 の場合は x のビットの補数です。

于 2013-03-28T18:56:49.330 に答える
0

^ はBitwise Exclusive Or (AKA. XOR )

「または」ではない


これは排他的論理和の真理値表です

xor

ソース

したがって、ビットが同一/同じである場合は常に XOR が 0 を出力するため、0 を取得します。

あなたの場合

9^9 または両方が同じ整数であるため、9 XOR 9あなたを与えるでしょう。0

于 2013-03-28T18:58:32.900 に答える