【发布时间】:2016-09-14 22:07:33
【问题描述】:
我有一个 19 位数字(64 位,总是 19 位),必须将其转换为 2 个 32 位整数。
2 32 位必须能够转换回 19 位数字。
有人有想法吗?
【问题讨论】:
我有一个 19 位数字(64 位,总是 19 位),必须将其转换为 2 个 32 位整数。
2 32 位必须能够转换回 19 位数字。
有人有想法吗?
【问题讨论】:
你可以通过移位来做到这一点:
#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;
【讨论】:
partA 或partB 最终为负数,则会影响a64 或b64 中的高位,这将产生错误的结果。作为一般规则,请始终使用unsigned 整数进行按位运算。