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

如何在JavaScript中将64位整数拆分为两个32位整数

拆分64位大整数为两个32位整数(JavaScript实现)

因为JavaScript的Number类型仅能精确表示53位以内的整数,直接将超过53位的大整数字符串转为Number会丢失精度。要实现无精度损失的拆分,推荐使用ES6引入的BigInt类型——它支持任意精度的整数运算,完美适配64位整数的处理需求,且无需手动做字符串运算。

实现代码

function getLowerHalf(numAsString) {
  const bigNum = BigInt(numAsString);
  // 提取低32位,转成Number(32位范围远小于53位精度上限,无精度损失)
  return Number(bigNum & 0xFFFFFFFFn);
}

function getUpperHalf(numAsString) {
  const bigNum = BigInt(numAsString);
  // 无符号右移32位得到高32位,转成Number
  return Number(bigNum >>> 32n);
}

// 测试示例
let numAsString = "123456789012345678";
let upperHalf = getUpperHalf(numAsString); // 123456786224119808
let lowerHalf = getLowerHalf(numAsString); // 2788225870

原理说明

  1. BigInt转换:将输入的大整数字符串转为BigInt类型,确保完整保留64位整数的所有精度。
  2. 低32位提取:使用位掩码0xFFFFFFFFn(BigInt类型的32位全1值)与原数做按位与运算,直接得到低32位的数值。
  3. 高32位提取:通过无符号右移32位操作(>>>32n),将原数的高32位移到低32位的位置,得到高32位的无符号数值。
  4. 转Number安全:32位整数的最大值为2^32-1(约42亿),远小于Number能精确表示的上限2^53,因此将BigInt结果转为Number不会丢失精度。

如果你的运行环境不支持BigInt(如极老版本浏览器),才需要手动实现字符串拆分运算,但目前主流环境均已支持BigInt,这是最简洁高效的方案。

内容的提问来源于stack exchange,提问作者Patrick O'Brien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:45:24