Python:整数之间的按位OR

时间:2013-03-28 18:54:14

标签: python bit-manipulation bitwise-or

我在执行按位操作时在python中看到一个奇怪的行为

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

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

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

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

2 个答案:

答案 0 :(得分:3)

您正在申请独家或(^)。 您正在尝试按比例应用常规或(|)。

来自Python Wiki

  

x | ÿ

     

是“按位还是”   如果y的x AND的相应位为0,则输出的每个位为0,否则为1。

     

x ^ y

     

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

答案 1 :(得分:0)

^是Bitwise Exclusive Or(AKA.XOR)

不是“或”


这是Exclusive Or

的真值表

xor

source

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

在你的情况下

9^99 XOR 9将为您提供0,因为两者都是相同的整数。