javascript位运算符直接操作32位二进制,仅适用于安全整数范围[-2147483648, 2147483647],需用>>>避免符号扩展,可替代取整、奇偶判断等操作,超范围或非整数输入会导致不可靠结果。

JavaScript 位运算符能直接操作数字的低32位二进制表示,跳过浮点数解析和类型转换开销,因此在整数范围内的特定计算中比常规算术更轻量、更确定。关键在于理解其隐式转换机制,并严格限定使用场景。
只对安全整数做位运算
位运算会把操作数先转为32位有符号整数(补码),再计算,最后转回 Number 类型。这意味着:
- 超过 ±231−1 的整数会被截断或溢出,比如
2147483648 & 1实际按-2147483648 & 1算 - 小数、
NaN、Infinity会被转成 0;字符串如'12'会先被Number()转换,但'12px'变 0 - 确保输入是整数且在
[-2147483648, 2147483647]内,否则结果不可靠
用无符号右移统一语义
JavaScript 的 >> 是有符号右移,负数高位补 1,容易产生意外负值。需要无符号逻辑时,一律用 >>>:
-
0x80000000 >> 0得-2147483648(符号位扩展) -
0x80000000 >>> 0得2147483648(高位补 0) - 提取高16位推荐写法:
(value >>> 16) & 0xFFFF,避免符号干扰
用位运算替代常见整数操作
在整数上下文中,位运算可简洁替代部分 Math 或类型转换操作:
- 取整:
x | 0、x >> 0、x >>> 0(仅适用于安全整数) - 判断奇偶:
n & 1比n % 2 === 0更快且不依赖除法 - 快速乘除 2 的幂:
n 等价于 <code>n * 8,n >>> 2等价于Math.floor(n / 4)(无符号) - 组合/拆分字节:
(r 打包 RGB,再用掩码加移位反向提取
注意 BigInt 和混合类型的边界
位运算不支持 BigInt 与普通 Number 混合操作,且 、<code>>>、>>> 在 BigInt 中需显式用 n 后缀:
- 处理大于 32 位的数据(如哈希、加密),应改用
BigInt+&n、|n、等 1n 合法,但 <code>1 已超出 32 位安全范围,结果失真- 不要对浮点数、大整数(如
9007199254740992 + 1)直接位运算——精度早已丢失
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











