概述
二进制(binary
)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。 这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。 数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。
二进制和八进制、十进制、十六进制都是一样的,逢几进一。
位运算
1、与运算(and&
)
# 两个都为1 结果为1
>>> 0b10 & 0b11
2
2、或运算(or |
)
# 有一个结果为1 结果为1
>>> 0b10 | 0b01
3
3、异或运算(^
)
# 与运算取反
>>> 0b101 ^ 0b111
2
4、非运算(~
)
# 0就是1 1就是0
>>> ~0b101
-6
5、左移(<<
)
# 左移几倍就是扩大几倍
>>> bin(0b11 << 1)
'0b110'
6、右移(>>
)
# 右移几倍就是扩大几倍
>>> bin(0b11 >> 1)
'0b1'
二进制转十进制
公式:
- 2的n次方的二进制为:1+n个零
- 2的n次方减一的二进制为:n个1
32 = 2^5 = 0b100000
31 = 2^5-1 = 0b11111
应用
二进制的应用非常广泛.判断一个数的奇偶性,权限设计等等都可以用到。
判断奇偶数
def num_type(num):
if num & 1 == 0:
return "偶数"
else:
return "奇数"
RBAC
RBAC
是基于角色的权限管理,给角色赋予权限,给用户赋予角色,方便管理。
所以在RBAC的设计上,我们有一个功能表。
用户表 | 角色表 | 用户-角色表 | 功能节点表 | ||||
---|---|---|---|---|---|---|---|
username | password | name | auth | user_id | role_id | id | auth |
用户1 | pwd1 | 财务 | 1 | 1 | 1 | 1 | 1 |
用户2 | pwd2 | 销售 | 11 | 1 | 2 | 2 | 10 |
用户3 | pwd3 | 推广 | 110 | 1 | 3 | 3 | 100 |
- 我们用MySQL做RBAC的时候,至少需要五张表,而且耦合度高,使用二进制做权限只需要四张表就可以搞定。
- 在给功能节点只能具有单个权限,1,2,4,8
- 一个角色可以拥有几个权限,10,110,111等,哪个位为1就代表第几位有权限。
- 一个人可以有多个权限,在查看用户具有的节点的时候,我们可以查出来用户的角色对用的权限,再做位或运算即可。
- 针对角色取消权限,我们只需要做异或运算即可。