Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的位运算_Python_Bit Manipulation_Bitwise Operators - Fatal编程技术网

Python中的位运算

Python中的位运算,python,bit-manipulation,bitwise-operators,Python,Bit Manipulation,Bitwise Operators,我正在寻找关于如何在python中进行逐位计算的建议 我遇到的主要问题是python的位运算符具有无限精度,这意味着-1实际上是“111…….111”。那不是我想要的。我想模拟真正的硬件,它将有一些固定的精度,比如说32位 以下是一些陷阱: 1) -n应返回32位2的补码(取无限精度-n中较低的32位即可轻松实现) 2) n>>3应该是一个32位数字的算术移位,这意味着如果位31是“1”,那么位31:28在移位3之后应该是“1”。您可以使用numpy,它有内置类型和更多 您始终可以添加&((1>

我正在寻找关于如何在python中进行逐位计算的建议

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

以下是一些陷阱:

1) -n应返回32位2的补码(取无限精度-n中较低的32位即可轻松实现)


2) n>>3应该是一个32位数字的算术移位,这意味着如果位31是“1”,那么位31:28在移位3之后应该是“1”。

您可以使用numpy,它有内置类型和更多

您始终可以添加
&((1>1
4294967293

你可以使用numpy,它内置了int32类型。GWW:我正要把它作为一个答案发布。也许你想自己发布一个答案?@Sven Marnach:当然可以发布。谢谢,我不确定他是否想使用外部库。谢谢你的建议。理想情况下,我想要任意大小的整数,而不是必须限制为32、64等。如果32位精度不是必需的,那么硬件很可能有<32位整数。@DasBoot:当你说你想要一个2的补码时,这意味着你也要使用负整数,对吗?这对>>运算符不太管用,但对吗?在某些情况下,它会移动0而不是1。好的。很好。不管怎样,我可以模板化这个类?有类似Int的东西吗?你不能用Python模板化类,但是你可以编写这个类,这样它在实例化时就可以获得所需的字数,并相应地运行。
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