Python Bitwise Shift无法按预期工作

时间:2014-07-07 18:49:46

标签: python binary bit-manipulation shift

这是我的代码

http://pastebin.com/xRAS7qLH

这会产生一个无限循环,所以不要运行它。

        intMask = 0
        while(temp != 0):
            print bin(temp)[2:].zfill(32)
            temp = long(temp << 1)
            intMask += 1

当我查看输出时,它看起来像这样

11111111111111111111111100000000

111111111111111111111111000000000

1111111111111111111111110000000000

我期待的是更像这样的东西

11111111111111111111111100000000

11111111111111111111111000000000

11111111111111111111110000000000

python必须有不同的东西,或者我需要对某些内容进行类型转换?我在这里缺少什么?

1 个答案:

答案 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)