javascript中bigint位运算会截断为32位有符号整数再计算,不保持任意精度,且操作数类型必须严格统一;算术运算才真正支持任意精度。

JavaScript 中 BigInt 的位运算不是“高精度版 Number 位运算”,而是有自己的一套规则:它不保持任意精度,会先截断再计算,且类型必须严格统一。
位运算会自动截断到 32 位有符号整数
BigInt 执行 &、|、^、>、>>> 时,并不会保留完整位宽。引擎会把操作数先模 2³²,再转为 32 位有符号整数(等价于 Number(value) & 0xFFFFFFFF | 0),运算后再转回 BigInt。
1n 结果是 <code>0n(因为1 超出 32 位,被截成 0)-
0x100000001n & 0xFFFFFFFFn得到1n(高位全被丢弃,只留低 32 位) -
-1n >> 1n是-1n(和-1 >> 1 === -1一致,不是数学右移)
所有操作数必须是 BigInt 类型
不能混用 Number 和 BigInt,哪怕看起来只是个常数——任何混合都会立即抛出 TypeError。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ✅ 正确:
100n & 255n、1n 、<code>BigInt(42) | 0xFFn - ❌ 报错:
100n & 255、1n 、<code>1n & 0xFF - 注意:
1n 也报错,必须写成 <code>1n
右移运算符没有符号区分
BigInt 没有固定位宽和符号位概念,所以 >> 和 >>> 行为完全相同,都执行“向零取整的右移”:
-
-8n >> 1n→-4n -
-8n >>> 1n→ 同样是-4n - 本质是
floor(x / 2^y),不涉及补码扩展或无符号填充
算术运算才真正保持任意精度
如果你需要大数精度,应该用加减乘除幂取模这些算术运算,它们对 BigInt 完全按大整数规则执行,无截断:
-
9007199254740991n + 1n→9007199254740992n(Number 已溢出) -
2n ** 100n→ 精确的 127 位结果 -
123456789012345678901234567890n % 1000n→890n
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










