位运算
2021年6月4日...大约 1 分钟
昨天同事分享时提到自己用来解决权限存储的办法,提到了位运算。
原理大致如下,有四个操作 1 增, 2 删, 3 改, 4 查
,不同用户有不同的权限,甲有 1,2,3
的权限,那么他的权限就存 21 + 22 + 23 = 14,乙有 2,3,4
的权限,那么他的权限就存 22 + 23 + 24 = 28,当判断的时候:
(Math.pow(2, 2) & 14) === Math.pow(2, 2)
// true
(Math.pow(2, 4) & 14) === 0
//true
(Math.pow(2, 4) & 28) === Math.pow(2, 4)
//true
(Math.pow(2, 1) & 28) === 0
//true
如果和中没有对应的2的次幂的话,&
运算的结果是 0 ,有的话, &
运算结果就是该次幂。来看下这之中发生了啥子:
进制/2的次幂 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
2 | 10 | 100 | 1000 | 1000 |
10 | 2 | 4 | 8 | 16 |
甲,
十进制: 2^1^ + 2^2^ + 2^3^ = 14
二进制: 10 + 100 + 1000 = 1110
4 & 14 ==> 100 & 1110 ==> 0100 & 1110 = 100 = 4
16 & 14 ==> 10000 & 1110 ==> 10000 & 01110 = 00000 = 0
乙,
十进制: 2^2^ + 2^3^ + 2^4^ = 28
二进制: 100 + 1000 + 10000 = 11100
16 & 28 ==> 10000 & 11100 = 10000 = 16
2 & 28 ==> 10 & 11100 ==> 00010 & 11100 = 00000 = 0
关于位运算,大家可以了解下这篇文章 位运算简介及实用技巧(一):基础篇 ,大佬写的非常详实