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

JavaScript中5与不同长度0x5前缀十六进制数按位与结果异常求解

JavaScript 64位数值位运算结果异常原因

核心原因

  • JavaScript 中针对Number类型的所有按位操作符,都会先将两个操作数强制转换为32位有符号补码整数,超过32位的高位部分会被直接截断丢弃,不会参与运算。
  • 常规Number类型为IEEE 754双精度64位浮点数,仅能精确表示范围在-2^53 ~ 2^53之间的整数,超出该范围的整数值本身就会存在精度丢失问题。

对应当前问题的验证说明

你给出的三个十六进制常量:

  1. 0x5555555555555为13位十六进制,对应二进制长度为52位,低于2^53的精度阈值,且低32位的最后三位为101,和数值5(二进制101)按位与得到结果5,符合预期。
  2. 0x55555555555555为14位十六进制,数值超过32位有符号整数的最大值2^31-1,按位运算时高位被截断,剩余低32位的最后三位为100,和5按位与得到结果4。
  3. 0x555555555555555为15位十六进制,截断后低32位的最后三位为000,和5按位与得到结果0。

64位位运算解决方案

如果需要对64位甚至更长的整数执行位运算,使用ES2020标准新增的BigInt类型即可,在数值末尾加n标识为BigInt类型,即可保留完整的位数参与运算:

console.log(5n & 0x5555555555555n);
console.log(5n & 0x55555555555555n);
console.log(5n & 0x555555555555555n);

以上代码三次输出均为5n,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:15:02