JavaScript位运算符操作32位有符号整数,用于标志位、掩码等底层场景;需理解ToInt32转换规则及各运算符行为,推荐ArrayBuffer+DataView处理二进制数据,避免浮点数和超大整数直接位运算。

JavaScript 中位运算符直接操作数值的二进制表示(32 位有符号整数),适合高效处理标志位、掩码、数据压缩、协议解析等底层二进制场景。关键在于理解 JavaScript 如何将操作数转为 32 位补码,以及各运算符的行为边界。
位运算的基础转换规则
JavaScript 所有位运算符(&、|、^、~、<<、>>、>>>)会先将操作数强制转为 32 位有符号整数(使用 ToInt32):
- 小数部分被截断(
5.9→5) - 超出 32 位范围的值取模:
Math.pow(2, 32),如0x100000000变成0 - 负数按补码表示(例如
-1是0xFFFFFFFF)
常用位运算符的实际用途
&(按位与):提取特定位或判断标志是否开启
例:检查第 3 位(从 0 开始)是否为 1:value & (1 << 3) 结果非零即为真
|(按位或):设置某一位为 1
例:开启第 2 位:value | (1 << 2)
^(按位异或):翻转某一位或清零(与自身异或得 0)
例:翻转第 0 位:value ^ 1;清空所有位:value ^ value
~(按位非):逐位取反,常配合 & 实现“清除特定位”
例:清除低 4 位:value & ~0xF
<< / >> / >>>:左移、带符号右移、无符号右移
注意:>> 保留符号位,>>> 总是补 0,对负数结果差异大(如 -1 >> 1 === -1,而 -1 >>> 1 === 0x7FFFFFFF)
处理多字节数据的技巧
JavaScript 的 ArrayBuffer + DataView 是安全操作二进制数据的推荐方式,位运算可辅助解析字段:
- 从 4 字节整数中提取高 16 位:
(value >>> 16) & 0xFFFF - 组合两个 16 位值为一个 32 位:
(high << 16) | low - 读取某字节的第 n 位(n=0~7):
(byte & (1 << n)) !== 0
避免直接对浮点数或大整数(>2³²−1)做位运算——精度会丢失。需要处理 BigInt 时,应改用 BigInt 类型和对应运算符(如 &n),但注意它不支持移位以外的混合类型运算。
立即学习“Java免费学习笔记(深入)”;
常见陷阱与规避方法
位运算返回的是 32 位有符号整数,可能产生意外负值(如 0x80000000 >> 0 得 -2147483648)。若需无符号语义,统一用 >>> 0 转换:
(0x80000000 >> 0) // -2147483648(0x80000000 >>> 0) // 2147483648
用 const MASK = 0xFF 替代 255 提升可读性;用 1 << n 表达第 n 位掩码,比硬编码十六进制更清晰。


















