我正在尋找關於如何在python中進行按位運算的建議。Python中的按位運算
我的主要問題是,python的按位運算符具有無限精度,這意味着-1真的是「111 ....... 111」。這不是我想要的。我想模擬真正的硬件,它會有一些固定的精度,比如32位。
下面是一些陷阱:
1)-n應返回一個32位的2的補數(這是很容易通過採用無限精度-n的低32位)
2實現)N >> 3,應該是一個32位數的算術移位,這意味着如果位31爲'1',則移位後的位31:28應該爲'1'。
我正在尋找關於如何在python中進行按位運算的建議。Python中的按位運算
我的主要問題是,python的按位運算符具有無限精度,這意味着-1真的是「111 ....... 111」。這不是我想要的。我想模擬真正的硬件,它會有一些固定的精度,比如32位。
下面是一些陷阱:
1)-n應返回一個32位的2的補數(這是很容易通過採用無限精度-n的低32位)
2實現)N >> 3,應該是一個32位數的算術移位,這意味着如果位31爲'1',則移位後的位31:28應該爲'1'。
在執行任何操作之前,您總是可以添加& ((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
這對於>>操作符來說並不適用,雖然對?在某些情況下它會移動0而不是1。 – 2011-05-13 15:50:30
@Das:它可以工作。查看更新。 – kennytm 2011-05-13 15:59:20
好的。尼斯。無論如何,我可以模板這個類?有像Int
您可以使用numpy,它內置了int32類型等等。
你可以使用numpy,它已經內置在int32類型中。 http://docs.scipy.org/doc/numpy-1.5.x/reference/arrays.scalars.html – GWW 2011-05-13 15:41:38
GWW:我正準備發佈這個答案。也許你想自己做出答案? – 2011-05-13 15:43:25
@Sven Marnach:當然我可以發表感謝,我不確定他是否想要使用外部庫。 – GWW 2011-05-13 15:45:09