【问题标题】: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 2012-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多