# 二进制表示权限状态码
- 用户的状态用二进制表示
- 添加某状态时,使用用户的状态码或 | 该状态的二进制值
- 判断用户是否拥有该状态时,用与& 的结果大于 0 公式: 1)权限 = 授权码 & 权限 2) 授权码 = 授权码 | 权限
- 删除用户具有的某一状态用异或 ^ ==> 应该与非 NAND
举例1:
假设: 用户权限为(
num=10011 19)1)增加某权限为(
code=01000 8) 10011 | 01000 = 110112)判断是否有某权限(
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