位运算符处理权限位掩码的核心是将每种权限映射为独立二进制位,通过 |、&、^、~ 实现高效增删查改;定义权限常量用 1

用位运算符处理权限位掩码,核心是把每种权限映射为一个独立的二进制位,再用 |、&、^、~ 高效增删查改——不占额外内存,一次整数操作就能完成多权限判断或批量设置。
定义权限常量:用左移固定每个权限位置
每个权限对应唯一一位,避免冲突。常用写法是 1 :
PERM_READ = 1PERM_WRITE = 1PERM_EXEC = 1PERM_ADMIN = 1
这样定义后,权限值互不重叠,后续所有操作才可精准定位单个位。
组合与设置权限:用 |= 批量开启
用户需要读+执行权限,直接按位或合并:
-
user_perms |= PERM_READ | PERM_EXEC→ 原值0b0000变成0b0101 - 已有的权限不受影响;新增权限自动置 1,无需先判断是否存在
- 支持链式添加:
user_perms |= a; user_perms |= b;等价于user_perms |= a | b
检测与清除权限:用 & 判断,&= ~ 安全删除
检查是否具备某权限,只看对应位是否为 1:
-
if (user_perms & PERM_WRITE) { ... }—— 结果非零即有该权限 - 要取消写权限:
user_perms &= ~PERM_WRITE(先取反得0b1101,再与原值按位与) - 不能用
user_perms ^= PERM_WRITE直接翻转,否则可能误删其它权限(异或会把 1 变 0、0 变 1)
切换与批量管理:用 ^ 翻转特定权限
异或适合“开关式”切换,比如调试时临时禁用某权限:
-
user_perms ^= PERM_ADMIN—— 若原来有 admin,就去掉;没有就加上 - 想一次性翻转读和执行:
user_perms ^= (PERM_READ | PERM_EXEC) - 注意:仅适用于明确知道当前状态是否需翻转的场景,日常增删仍推荐
|=和&= ~
不复杂但容易忽略:所有操作都基于整数变量,无分支、无循环、无函数调用开销。在高频鉴权(如 Web 请求中间件、内核系统调用入口)中,这种位级控制比字符串匹配或布尔数组快一个数量级以上。










