超过64位时截断整数

问题描述 投票:2回答:2

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

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

print hex(c)

我的问题是上述输出:

0x115151514

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

0x15151514

NB:我不希望截断字符串输出,我想要c = 0x15151514。我正在尝试模拟一些64位寄存器操作。

python integer 64-bit addition
2个回答
5
投票

然后只使用逻辑和运算符&

c = 0xFFFFFFFF & (a+b)

顺便说一下,这些是32位值,而不是64位值(计算F;每两个F是一个字节== 8位;它是八个F,所以是四个字节,所以是32位)) 。


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

© www.soinside.com 2019 - 2024. All rights reserved.