位运算

... 2021-06-04 10:46 大约 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
1
2
3
4
5
6
7
8

如果和中没有对应的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
1
2
3
4
5
6
7
8
9
10
11

关于位运算,大家可以了解下这篇文章 位运算简介及实用技巧(一):基础篇 (opens new window) ,大佬写的非常详实

上次编辑于: 2021年6月18日 19:25