我在执行按位操作时在python中看到一个奇怪的行为
>>> bin(4)
'0b100'
>>> bin(9)
'0b1001'
>>> bin(9^4)
'0b1101'
上面我看到了OR的预期行为,数字在右边对齐,每个位都是ORed,产生结果。但是,当我或两个相同的整数时,结果总是0,当我应该是数字时,我认为。
>>> bin(9^9)
'0b0'
这是一个错误还是一个非常奇怪的功能?谁能解释一下?
答案 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
的真值表
因此,得到0,因为只要位相同/相同,XOR就会输出0。
在你的情况下
9^9
或9 XOR 9
将为您提供0
,因为两者都是相同的整数。