Python 位移 32 位限制
可能重复的问题:
计算校验和时的问题:将int转换为有符号的int32
这个问题应该比较简单,但我不知道怎么去搜索它……我找到了一些半相关的内容,但没有一个能完全解决我想做的事情。
>>> 1171855803 << 7
149997542784L # I want -326312576
换句话说,就是把这个数字当作整数来处理,不要让它转换成长整型。我该怎么做呢?
我尝试了这个问题里的解决方案:
>>> x = 0xFFFFFFFF & (1171855803 << 7)
>>> if x > 0x7FFFFFFF: print -(~(x - 1) & 0xFFFFFFFF)
else: print x
-326312576L # yay!
它有效!
2 个回答
1
你可以试试这个:
import ctypes
a=ctypes.c_int32(1171855803)
a.value<<=7
print a
这样会得到:c_int(-326312576)
这似乎可以进行一些特定于平台的位操作。不过我不太确定这样做的效率如何。
1
这可能不是最好的答案,但这个方法可以用...
import numpy as np
np.int32(1171855803) << 7