Python中的位运算

4 投票
2 回答
2932 浏览
提问于 2025-04-16 17:35

我想找一些关于如何在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

撰写回答