这是我的代码
这会产生一个无限循环,所以不要运行它。
intMask = 0
while(temp != 0):
print bin(temp)[2:].zfill(32)
temp = long(temp << 1)
intMask += 1
当我查看输出时,它看起来像这样
11111111111111111111111100000000
111111111111111111111111000000000
1111111111111111111111110000000000
我期待的是更像这样的东西
11111111111111111111111100000000
11111111111111111111111000000000
11111111111111111111110000000000
等
python必须有不同的东西,或者我需要对某些内容进行类型转换?我在这里缺少什么?
答案 0 :(得分:1)
Python的整数具有任意精度,除了难以拼写外,意味着当你移位时,它会不断变大。如果你想限制大小,你需要做类似的事情
temp = long(temp << 1) & (0xffffffff)
应该归零。
编辑:具体来说,&amp;做一个按位AND; 0xffffffff(8 f)是32 1(二进制),因此32位内的任何内容都将被保留;超出的任何东西都将被设置为零)。有关详细信息,您可以执行以下操作:
temp = long(temp&lt;&lt; 1) 打印“在AND之前:”,bin(temp) temp = temp&amp;为0xffffffff print“After AND:”,bin(temp)