【问题标题】:Truncate integers when more than 64 bits超过 64 位时截断整数
【发布时间】:2015-09-20 15:01:25
【问题描述】:
我正在尝试添加一些64 bit,即:
a = 0x15151515
b = 0xFFFFFFFF
c = a + b
print hex(c)
我的问题是上面的输出:
0x115151514
我希望添加为64 bit 并忽略溢出,即预期输出为:
0x15151514
注意:我不想截断字符串输出,我想要c = 0x15151514。我正在尝试模拟一些 64 位寄存器操作。
【问题讨论】:
标签:
python
integer
64-bit
addition
【解决方案1】:
然后只需使用逻辑与运算符&
c = 0xFFFFFFFF & (a+b)
顺便说一下,这些是 32 位值,而不是 64 位值(计算 F;每两个 F 是一个字节 == 8 位;它是八个 F,所以是四个字节,所以是 32 位)。
【解决方案2】:
使用 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