位运算

昨天同事分享时提到自己用来解决权限存储的办法,提到了位运算。

原理大致如下,有四个操作 1 增, 2 删, 3 改, 4 查 ,不同用户有不同的权限,甲有 1,2,3 的权限,那么他的权限就存 2^1^ + 2^2^ + 2^3^ = 14,乙有 2,3,4 的权限,那么他的权限就存 2^2^ + 2^3^ + 2^4^ = 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的次幂1234
21010010001000
1024816
甲,
十进制:  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

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

MIT Licensed | Copyright © 2017-present 进击的学霸, 自豪的使用 七牛云,已加入十年之约