3 回答
TA贡献1775条经验 获得超11个赞
尝试使用4294967296而不是1000000000,这会使两个值重叠,从而不可分割。
无论选择什么因子,它都必须大于3333333333,而不是小于 。
看看使用较小的值33和11使用 factor会发生什么10。
33 * 10 + 11 = 341
然后提取:
341 / 10 = 34
341 % 10 = 1
TA贡献1796条经验 获得超4个赞
还要考虑位移和另一个按位运算:
word0 = 3333333333
word1 = 1111111111
temp64 = (word0 << 32) | word1
print(temp64)
word00 = temp64 >> 32
word11 = temp64 & 0xFFFFFFFF
print(word00, word11)
>>14316557653012788679
>>3333333333 1111111111
TA贡献1798条经验 获得超3个赞
首先,看看 line temp64 = np.uint64(word0) * 1000000000。如果您检查 类型temp64,它将是 numpy.float64!因此,您需要先将 1000000000 转换为 uint64。
没有 numpy 看起来更好:
# overlapping case
word0 = 3333333333
word1 = 1111111111
factor = 1000000000
temp64 = word0 * factor
temp64 = temp64 + word1
print(divmod(temp64, factor))
# non-overlapping case
word0 = 3333333333
word1 = 1111111111
factor = 10000000000 #extra zero added
temp64 = word0 * factor
temp64 = temp64 + word1
print(divmod(temp64, factor))
添加回答
举报