Python中的位运算
我想找一些关于如何在Python中进行位运算的建议。
我遇到的主要问题是,Python的位运算符可以处理无限精度,这就导致-1实际上是“111.......111”。这并不是我想要的。我想模拟真实的硬件,而真实硬件会有固定的精度,比如32位。
这里有一些需要注意的地方:
1) -n应该返回一个32位的二进制补码(这可以通过取无限精度的-n的低32位来轻松实现)。
2) n >> 3,应该是一个32位数字的算术右移,这意味着如果第31位是'1',那么在右移3位后,第31到第28位也应该是'1'。
2 个回答
6
你可以使用numpy,它里面有内置的 int32 类型,还有很多其他功能。
3
你可以在进行任何操作之前,先加上一个 & ((1<<32) - 1)
的掩码,这样可以把数字限制在32位以内,比如:
class Int32(int):
def __neg__(self):
return Int32(int.__neg__(self) & ((1 << 32) - 1))
def __rshift__(self, other):
if self & (-1 << 31):
retval = int.__rshift__(int.__sub__(self, 1<<32), other)
return Int32(retval & ((1 << 32) - 1))
else:
return Int32(int.__rshift__(self, other))
...
>>> -Int32(5)
4294967291
>>> (-Int32(5)) >> 1
4294967293