先说结论,基于2的倍数的数字相加 ,当一个数与改累加的和做与运算,如果得到的结果是他本身说明该值在这个累加的所有的值中的一项。
先来看一组数据
1,2,4,8,16对应的二进制分别是
0001,0010,0100,1000,10000
(1+2+4+8+16)&1=1
(1+2+4+8+16)&2=2
(1+2+4+8+16)&4=4
(1+2+4+8+16)&16=16
(1+8)&4=0
(1+4+8)&16=0
之前的项目有个这样的业务场景
有一个课程可以开放给不同等级的会员
假设一级为1二级为2三级为4四级为8
开放给所有会员就是所有等级相加 1+2+4+8=15
判断有没有权限使用
会员等级&15 得到结果如果是本身说明该会员有权限,否则就是没有权限。
在mysql中
假设有下面一个表
id | code |
1 | 6 |
2 | 12 |
假设id=1的code为2+4
id=2的值为8+4
现在有一个会员等级为4的用户,查询结果
select*from test where code&4=4
结果为id=1和2 有两个
select *from test where code&8=8
查询结果只有id=2 只有一个
select *from test where code&1=1
查询结果为空。