Python Bitshift 32位约束

时间:2011-08-26 07:11:07

标签: python integer bit-manipulation bit-shift

  

可能重复:
  Problem in calculating checksum : casting int to signed int32

这应该是一个相对简单的答案,我只是不知道如何搜索它...我得到了一些半相关things,但没有任何东西适合我正在尝试做的事情

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

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

我在this question中尝试了解决方案:

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

-326312576L # yay!

有效!

2 个答案:

答案 0 :(得分:1)

可能不是最佳答案,但这有效......

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

答案 1 :(得分:1)

你可以尝试

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

给出:c_int(-326312576)

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