You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

16位有符号整数的64位位打包与还原:该位转换方式是否安全?

16位有符号整数打包至64位无符号整数的方案验证

需求

将范围在[-32768, 32768)的16位有符号整数打包进64位无符号整数,后续可准确还原为原范围的有符号整数。

打包方案

核心思路:先得到目标16位有符号整数,立即转为16位无符号整数,扩展为64位无符号整数后,通过位移将这16位放到指定位置。

打包伪代码:

已知整数x、y满足 x - y ≥ -32768 且 y - x < 32768;
const int MASK_POS = 45;
const unsigned short int u_s = x - y;
unsigned long long int ull_s = u_s;
ull_s <<= MASK_POS;

还原方案

核心思路:从64位无符号整数中提取指定位置的16位无符号数据,再转回16位有符号整数。

还原伪代码:

已知64位无符号整数ull_s的第46到61位存储了16位有符号整数的编码;
const unsigned short int u_s = ((ull_s >> MASK_POS) & 0xffff);
const short int s_s = u_s;
const int difference_x_and_y = s_s;

疑问与验证思路

我认为该方案合理,但担忧负数位移操作存在平台特定行为。不过先转同位数无符号再扩位,还原时先提取指定位长无符号再转同长有符号的流程,应该能保证跨平台安全。

注:该64位无符号整数的其余48位将存储大量其他数据,从高3位到低31位及中间14位均已分配用途。我可编写单元测试验证跨架构一致性,但希望提前发现潜在问题。

内容的提问来源于stack exchange,提问作者dscerutti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:20:03