XOR bin值时缺少0

时间:2012-08-31 03:16:21

标签: python xor bin

我正在尝试对二进制值进行异或,但由于某些未知原因,我在转换中丢失了第一个0。我知道我做错了什么?

m1 = int('01010100011001010111001101110100',2)
c1 = int('00111001000001000001000000000001',2)
c2 = int('00111101000100110000110000010001',2)

kk = bin(m1 ^ c1)[2:]
xx = int(kk,2)

m2 = bin(xx ^ c2)[2:]
print m2

出于某种原因,这会返回1010000011100100110111101100100而不是01010000011100100110111101100100,因此我将失去领先的0

3 个答案:

答案 0 :(得分:3)

Python不知道答案中你想要多少位。告诉它:

m2 = format(bin(xx ^ c2)[2:],'0>32')

格式字符串表示用零填充的右对齐,32个字符的字段。

请参阅Format Specification Mini-Language

实际上,您可以使用b格式说明符执行以下操作:

m1 = int('01010100011001010111001101110100',2)
c1 = int('00111001000001000001000000000001',2)
c2 = int('00111101000100110000110000010001',2)

print format(m1 ^ c1 ^ c2,'0>32b')

或者:

print '{:0>32b}'.format(m1 ^ c1 ^ c2)

答案 1 :(得分:0)

您可以使用字符串方法zfill将输出填充到您需要的位数。

m2 = bin(xx ^ c2)[2:].zfill(32)

答案 2 :(得分:0)

通常从所有数字中删除前导零。例如,如果打印基数为10的数字123,则不会打印0123或0000123.它与基数2相同。如果要打印m1,c1或c2,您会看到也没有为它们打印前导零。