超过64位时截断整数

时间:2015-09-20 15:01:26

标签: python integer 64-bit addition

我试图执行一些64 bit添加,即:

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

print hex(c)

我的问题是以上输出:

0x115151514

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

0x15151514

注意:我不想截断字符串输出,我希望c = 0x15151514。我试图模拟一些64位寄存器操作。

2 个答案:

答案 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