JavaScript位运算符共7个:&(按位与)、|(按位或)、^(按位异或)、~(按位非)、(有符号右移)、>>>(无符号右移),用于32位整数的二进制操作,适用于权限管理、取整优化、颜色处理、状态压缩等场景,需注意类型转换、负数行为及运算符优先级。

JavaScript的位运算符是直接对数字的二进制表示进行操作的一类运算符,它们把操作数当作32位有符号整数(补码形式),逐位进行逻辑或移位处理。虽然日常开发中用得不多,但在底层控制、性能敏感场景和特定算法中非常有用。
常见的位运算符有哪些
JavaScript支持以下7个位运算符:
- &:按位与(AND)——对应位都为1时结果为1
- |:按位或(OR)——对应位有一个为1时结果为1
- ^:按位异或(XOR)——对应位不同时结果为1
- ~:按位非(NOT)——翻转每一位(0变1,1变0)
- :左移(Left shift)——二进制位向左移动,右侧补0
- >>:有符号右移(Sign-propagating right shift)——向右移动,左侧补符号位
- >>>:无符号右移(Zero-fill right shift)——向右移动,左侧补0(结果始终为非负数)
位运算在实际开发中的典型用途
位运算不是炫技工具,它解决的是特定类型的问题:
-
权限管理:用单个整数表示多个布尔状态。例如用 red">4(100) 表示“删除”,2(010) 表示“编辑”,1(001) 表示“查看”,那么 7(111) 就代表拥有全部权限;判断是否含某权限只需
flags & PERMISSION_EDIT -
快速取整与幂运算优化:
x >>> 0可替代Math.floor(x)(仅适用于正数);x 等价于x * Math.pow(2, n),在某些循环或图形计算中更高效 -
颜色值处理:RGB颜色常以 0xRRGGBB 形式存储,可用位运算快速提取各通道:
red = color >> 16 & 0xFF -
状态压缩与标志切换:用
flags ^= FLAG_A切换某个标志;用flags |= FLAG_B启用;用flags & FLAG_C检查是否启用
使用时需要注意的关键细节
位运算在JS中有一些容易踩坑的地方:
立即学习“Java免费学习笔记(深入)”;
- 所有操作数都会被强制转为32位有符号整数,小数部分被截断,超范围数值会溢出(如
2147483647 + 1变成-2147483648) -
>>和>>>对负数行为不同:-8 >> 1 是 -4,而 -8 >>> 1 是 2147483644(高位补0后当无符号数解释) - 浮点数参与位运算会先转整数,所以
3.9 | 0得到3,但3.9 & 0xFF也是3,不是四舍五入 - 位运算优先级低于比较运算符,写
a & b === c实际等价于a & (b === c),需加括号:(a & b) === c










