【问题标题】:64 bit Number to 2x 32 Bit64 位数字到 2x 32 位
【发布时间】:2016-09-14 22:07:33
【问题描述】:

我有一个 19 位数字(64 位,总是 19 位),必须将其转换为 2 个 32 位整数。

2 32 位必须能够转换回 19 位数字。

有人有想法吗?

【问题讨论】:

    标签: c++ numbers int 64-bit


    【解决方案1】:

    你可以通过移位来做到这一点:

    #include "stdio.h"
    
    uint64_t bigNum = 5678216589648569852;
    uint64_t merged = 0;
    
    uint32_t partA = 0;
    uint32_t partB = 0;
    
    //split
    partA |= bigNum;
    partB |= bigNum >> 32;
    
    //merge
    merged = partB;
    merged <<= 32;
    merged |= partA;
    

    【讨论】:

    • 右移有符号整数是实现定义的行为。
    • 我认为这没什么大不了的。也许如果在拆分和合并之间使用 32 位。如果不使用 32 位整数的内容,则 imo 无关紧要。我拆分只是用一些仅支持 32 位的协议发送 int。
    • 使用有符号整数还有另一个问题。如果partApartB 最终为负数,则会影响a64b64 中的高位,这将产生错误的结果。作为一般规则,请始终使用unsigned 整数进行按位运算。
    • @owacoder 没错。我现在将其更改为 uint。谢谢
    猜你喜欢
    • 2018-12-29
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2015-03-22
    • 2014-08-13
    相关资源
    最近更新 更多