超过 64 位时截断整数

Truncate integers when more than 64 bits

我正在尝试执行一些 64 bit 添加,即:

a = 0x15151515
b = 0xFFFFFFFF
c = a + b

print hex(c)

我的问题是以上输出:

0x115151514

我希望加法为 64 bit 并忽略溢出,即预期输出为:

0x15151514

注意:我不想截断字符串输出,我想要 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)

缺点:增加了一个依赖,需要小心文字:

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