我在python中使用xor运算符(^
)存在以下问题。我有两个二进制数字,a = 10100111
和b = 10000000
。当我使用xor运算符时,
print (10000000 ^ 10100111)
我得到的结果是166671而不是00100111.但是,当我使用
时print (100 ^ 101)
我得到了1(001)二进制的适当结果。即使我使用
print int(a) ^ int(b)
我仍然得到166671的结果。
问题:
为什么我得到的结果是166671而不是二进制结果00100111?
为什么在使用100 ^ 101时会得到合适的结果?
我正在运行Python 2.7.2版。
答案 0 :(得分:3)
100
是十进制100
(二进制为1100100
)。使用0bnnn
表单进行二进制表示。
>>> 0b100
4
>>> 100
100
>>> 0b100 == 100
False
>>> 0b100 ^ 0b101
1
>>> 0b100 & 0b101
4
>>> bin(0b100 & 0b101)
'0b100'
>>> '{:b}'.format(0b100 & 0b101)
'100'
答案 1 :(得分:2)
您使用的是十进制数表示,而不是二进制数。
10000000^10100111
二进制中的是
0b100110001001011010000000 ^ 0b100110100001110110001111
等于
0b101000101100001111
或十进制,
166671
100 ^ 101
二进制中的是
0b1100100 ^ 0b1100101
是
0b1
或者,在十进制中(在这种情况下恰好与二进制相同),
1