JavaScript位运算符操作32位有符号整数,按位与(&)仅当两对应位均为1时结果为1,常用于检测特定位(如num & (1 << 3)检查第3位)。

JavaScript 中的位运算符直接操作数值的 32 位有符号整数二进制表示,适用于底层控制、状态标记、权限管理、颜色处理等场景。虽然 JS 数字是 64 位浮点数,但位运算时会自动转换为 32 位补码整数,运算后再转回数字。
按位与(&):提取特定位或清零
按位与对两个操作数的每一位执行逻辑与:仅当两对应位都为 1 时结果位才为 1,否则为 0。
常见用途:
-
检测某一位是否为 1:用掩码(mask)配合 & 判断。例如检查第 3 位(从 0 开始计数)是否置位:
num & (1 ,结果非 0 表示该位为 1。 -
清零某些位:用掩码取反后 &。例如只保留低 4 位(清除高位):
num & 0b1111或num & 0xF。 -
判断奇偶性:
num & 1等价于num % 2,结果为 0 是偶数,1 是奇数(效率略高,但现代引擎优化后差异极小)。
按位或(|):设置特定位或合并标志
按位或对每一位执行逻辑或:只要任一操作数对应位为 1,结果位即为 1。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
常见用途:
-
设置某一位为 1:如将第 2 位设为 1:
num | (1 ,不影响其他位。 -
组合多个标志位(flag):定义常量时用 2 的幂,便于按位或合并。例如:
const READ = 1; // 0b001<br>const WRITE = 2; // 0b010<br>const EXEC = 4; // 0b100<br>let perms = READ | WRITE; // 0b011 → 3
-
快速取整(正数):
num | 0可替代Math.floor(num)(对非负整数有效),原理是强制转为 32 位整数并截断小数部分。
注意事项和陷阱
位运算在 JS 中有几处关键限制需留意:
-
仅对 32 位整数生效:超过 32 位的数会被截断。例如
0x100000000 | 1结果是1(因为高位被丢弃)。 -
负数使用补码表示:-1 的 32 位补码是全 1(
0xFFFFFFFF),所以-1 & 0xFF得到255,不是 -1。 -
优先级低于比较运算符:写
a & b === c实际等价于a & (b === c),应加括号:(a & b) === c。 -
不适用于大整数(BigInt):普通位运算符不支持 BigInt;如需处理大于 2⁵³ 的整数,须显式使用
&n、|n等 BigInt 运算符(注意末尾n)。
实用小技巧
结合 & 和 | 可实现原子级位操作:
-
翻转某一位:用异或
^更自然,但也可用num ^ (1 ;若坚持用 & 和 |,可先 & 清零再 | 置位。 -
安全获取字节值:如从颜色值
0xAABBCC提取 B 分量(中间字节):(color >> 8) & 0xFF—— 先右移 8 位,再用& 0xFF保证只取低 8 位。 -
简化条件开关:比如启用/禁用某个功能位:
// 启用 flag<br>flags |= FLAG_ENABLED;<br>// 禁用 flag<br>flags &= ~FLAG_ENABLED;

















