转自:https://blog.csdn.net/jjddrushi/article/details/52303628
传统的权限设计需要设计权限表和桥表,这样造成的数据冗余是相当大的,且数据表的查询也消耗掉
不少时间。
利用按位与(&)的一些数学特性可以取代这些。
例如: 1 代表超级管理员
2 代表商务
4 代表运营
2的n次方 …
而,你的权限是3,那么就代表你拥有1和2两个权限,7就代表有三个权限
具体算法是这样的
7 0 1 1 1
1 0 0 0 1
7&1= 0 0 0 1 = 1 即7中有1
同理:
7 0 1 1 1
2 0 0 1 0
7&2= 0 0 1 0 = 2 即7中有2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这样在设计管理员表的时候只需一个字段就可以完成多种权限的表达,而且按位与(&)是底层算法,
运算效率很高。
又比如:
20 % 8 = 4
20 & 7 = 4
- 1
- 2
上面二者的联系是,只有当在8位置上的数为2的n次方时,下式中7的位置上的数为2的n次方-1成立,
但是按位与计算的效率比取模的效率快六倍。
数学算法在解决实际问题的能力果然很厉害。。。吾还要好好学习啊。。。。