我正在尝试执行一些64 bit
加法,即:
a = 0x15151515
b = 0xFFFFFFFF
c = a + b
print hex(c)
我的问题是上述输出:
0x115151514
我希望加法为64 bit
,而忽略溢出,即预期输出为:
0x15151514
NB:我不希望截断字符串输出,我想要c = 0x15151514
。我正在尝试模拟一些64位寄存器操作。
然后只使用逻辑和运算符&
c = 0xFFFFFFFF & (a+b)
顺便说一下,这些是32位值,而不是64位值(计算F
;每两个F
是一个字节== 8位;它是八个F
,所以是四个字节,所以是32位)) 。
另一个使用numpy的解决方案:
import numpy as np
a = np.array([0x15151515], dtype=np.uint32) # use np.uint64 for 64 bits operations
b = np.array([0xFFFFFFFF], dtype=np.uint32)
c = a + b
print(c, c.dtype)
[[353703188] uint32
优点:如果执行许多操作,则比二进制掩码更具可读性,尤其是在使用其他操作(例如除法)的情况下,在这种情况下,您不仅可以在最终结果上应用掩码,还可以在中间操作上应用掩码,例如:(0xFFFFFFFF +1) // 2)
cons:添加一个依赖项,需要注意文字:
c = a + 2**32 # 2**32 does not fit in np.uint32 so numpy changes the type of c
print(c, c.dtype)
[[4648670485] uint64