我试图执行一些64 bit
添加,即:
a = 0x15151515
b = 0xFFFFFFFF
c = a + b
print hex(c)
我的问题是以上输出:
0x115151514
我希望添加64 bit
并忽略溢出,即预期输出为:
0x15151514
注意:我不想截断字符串输出,我希望c = 0x15151514
。我试图模拟一些64位寄存器操作。
答案 0 :(得分:4)
然后只使用逻辑和运算符&
c = 0xFFFFFFFF & (a+b)
顺便说一下,这些是32位值,而不是64位值(计算F
;每两个F
是一个字节== 8位;它是八个{{1所以四个字节,所以32位)。
答案 1 :(得分:0)
使用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