2011-08-26 106 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)

這似乎讓平臺特定的位操作。我不確定效率。