-4

执行按位运算时,我在 python 中看到了一个奇怪的行为

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

上面我看到了 OR 的预期行为,数字在右侧对齐,每个位都经过 ORed 生成结果。但是,在我看来,当我 OR 两个相同的整数时,结果应该是数字时总是 0。

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

这是一个错误还是一个非常奇怪的功能?谁能解释一下?

4

2 回答 2

3

您正在应用异或 ( ^)。您正在尝试应用常规的按位或 ( |)。

来自Python 维基

x | 是的

执行“按位或”。
如果 x AND y 的对应位为 0,则输出的每一位为 0,否则为 1。

x ^ y

执行“按位异或”。
如果 y 中的该位为 0,则输出的每个位与 x 中的相应位相同,如果 y 中的该位为 1,则它是 x 中该位的补码。

于 2013-03-28T18:56:49.330 回答
0

^ 是按位异或 (AKA. XOR)

不是“或”


这是异或的真值表

异或

资源

因此,您得到 0,因为只要位相同/相同,XOR 就会输出 0。

在你的情况下

9^9 或者9 XOR 9会给你,0因为两者都是相同的整数。

于 2013-03-28T18:58:32.900 回答