如何在python中使用XOR进行二进制操作?

时间:2013-10-08 15:57:57

标签: python python-2.7 cryptography xor

我在python中使用xor运算符(^)存在以下问题。我有两个二进制数字,a = 10100111b = 10000000。当我使用xor运算符时,

print (10000000 ^ 10100111) 

我得到的结果是166671而不是00100111.但是,当我使用

print (100 ^ 101) 

我得到了1(001)二进制的适当结果。即使我使用

print int(a) ^ int(b) 

我仍然得到166671的结果。

问题:

  1. 为什么我得到的结果是166671而不是二进制结果00100111?

  2. 为什么在使用100 ^ 101时会得到合适的结果?

  3. 我正在运行Python 2.7.2版。

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