我正在尝试对二进制值进行异或,但由于某些未知原因,我在转换中丢失了第一个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
。
答案 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,您会看到也没有为它们打印前导零。