Python中的按位运算

时间:2011-05-13 15:38:44

标签: python bit-manipulation bitwise-operators

我正在寻找有关如何在python中进行按位数学运算的建议。

我遇到的主要问题是python的按位运算符具有无限精度,这意味着-1实际上是“111 ....... 111”。那不是我想要的。我想模拟具有一些固定精度的实际硬件,比如32位。

以下是一些问题:

1)-n应返回32位2的补码数(这可以通过取无限精度的低32位来轻松实现)

2)n>> 3,应该是32位数的算术移位,这意味着如果位31为'1',则位移31后应为'1'。

2 个答案:

答案 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