1

我正在尝试对二进制值进行异或运算,但由于某种未知原因,我在转换中丢失了第一个 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

4

3 回答 3

3

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

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

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

请参阅格式规范迷你语言

实际上,您可以使用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)
于 2012-08-31T03:23:39.733 回答
0

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

m2 = bin(xx ^ c2)[2:].zfill(32)
于 2012-08-31T03:32:04.230 回答
0

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

于 2012-08-31T03:32:48.153 回答