Python 位移 32 位限制

0 投票
2 回答
3453 浏览
提问于 2025-04-17 00:23

可能重复的问题:
计算校验和时的问题:将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

撰写回答