# 二进制表示权限状态码

  1. 用户的状态用二进制表示
  2. 添加某状态时,使用用户的状态码或 | 该状态的二进制值
  3. 判断用户是否拥有该状态时,用与& 的结果大于 0 公式: 1)权限 = 授权码 & 权限 2) 授权码 = 授权码 | 权限
  4. 删除用户具有的某一状态用异或 ^ ==> 应该与非 NAND

举例1:

假设: 用户权限为(num=10011 19)

1)增加某权限为(code=01000 8) 10011 | 01000 = 11011

2)判断是否有某权限(code=01000) 判断方法:判断当前权限 & 某操作的权限 > 0是否成立

举例2:

若当前权限为11011,判断是否有01000的操作权限 11011 & 01000 = 01000 > 0 说明有此权限(与的结果,结果应该等于授权码)

如当前权限为:10011 10011 & 01000 = 00000 = 0 则不具有此权限

3)删除某权限(code=01000)

要先判断是否有该权限,有则异或 11011 ^ 01000 = 10011 没有权限再异或会出错 10011 ^ 01000 = 11011

上面的方法有误,应该是 num = num & (~code)

10011 & (~ 01000) = 10011 & 10111 = 10011
11011 & (~ 01000) = 11011 & 10111 = 10011