2011-08-26 54 views
0

可能重复:
Problem in calculating checksum : casting int to signed int32的Python位位移32位约束

这应该是一个比较简单的答案,我只是真的不知道如何寻找它...我有几个半相关的things,但没有什么符合我想要做的。

>>> 1171855803 << 7 
149997542784L # I want -326312576 

换句话说,将数字视为整数并且不允许将其转换为长整数。 我该怎么做?

我试图解决在this question

>>> x = 0xFFFFFFFF & (1171855803 << 7) 
>>> if x > 0x7FFFFFFF: print -(~(x - 1) & 0xFFFFFFFF) 
else: print x 

-326312576L # yay! 

它的工作原理!

+0

你是对的。 – skeggse

回答

1

未必是最好的答案,但这个工程......

import numpy as np 
np.int32(1171855803) << 7 
1

你可以尝试

import ctypes 
a=ctypes.c_int32(1171855803) 
a.value<<=7 
print a 

这给:c_int的(-326312576)

这似乎让平台特定的位操作。我不确定效率。