位运算通过将每个布尔状态映射为二进制位,实现高效紧凑的集合管理:1个int管32开关,用&判断、|添加、&~移除状态,支持超百位数组扩展,兼顾性能、内存与可维护性。

位运算在集合布尔判断中能实现高效、紧凑的状态管理,核心是把每个集合元素映射为一个二进制位,用单个数字代表整个集合的“存在/不存在”状态。
用位掩码表示集合成员
假设你有一组有限且固定的选项(如权限项、功能开关、标签类型),可预先分配唯一幂次位值:
- 读权限 → 1(即
1 ) - 写权限 → 2(即
1 ) - 删除权限 → 4(即
1 ) - 导出权限 → 8(即
1 )
那么用户权限值 5(二进制 101)就表示同时拥有“读”和“删除”权限,不含“写”和“导出”。
用 & 判断某成员是否在集合中
这是最常用也最轻量的操作。只要 mask & flag 结果非零,就说明该标志位被置起:
const READ = 1; const WRITE = 2; const DELETE = 4; const userPerms = READ | DELETE; // 值为 5 console.log(!!(userPerms & READ)); // true → 有读权限 console.log(!!(userPerms & WRITE)); // false → 无写权限 console.log(!!(userPerms & DELETE)); // true → 有删除权限
注意:这里用 !! 转为标准布尔值,也可直接用于 if 条件(因为非零即真)。
用 | 和 ^ 动态增删集合成员
无需数组 push/pop 或 Set.add/delete,纯数值运算即可维护集合状态:
- 添加权限:
userPerms |= WRITE(或运算置位) - 移除权限:
userPerms &= ~WRITE(与非运算清位) - 切换权限:
userPerms ^= WRITE(异或翻转位)
例如:userPerms = 5(读+删),执行 userPerms ^= WRITE 后变为 7(读+写+删);再执行一次又变回 5。
用 & 组合判断多个条件是否同时满足
比如要求用户“必须同时拥有读和写权限”,可写成:
const REQUIRED = READ | WRITE; // 值为 3
if ((userPerms & REQUIRED) === REQUIRED) {
// 满足全部必要权限
}
不能只写 userPerms & REQUIRED,因为那只要求“至少有一个”,而 === REQUIRED 才确保“全部都有”。











