我正在寻找有关如何在python中进行按位数学运算的建议。
我遇到的主要问题是python的按位运算符具有无限精度,这意味着-1实际上是“111 ....... 111”。那不是我想要的。我想模拟具有一些固定精度的实际硬件,比如32位。
以下是一些问题:
1)-n应返回32位2的补码数(这可以通过取无限精度的低32位来轻松实现)
2)n>> 3,应该是32位数的算术移位,这意味着如果位31为'1',则位移31后应为'1'。
答案 0 :(得分:6)
你可以使用numpy,它内置int32类型等等。
答案 1 :(得分: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