上一篇,讲了计数法-原码-反码-补码-位运算(二进制、十进制)理论,如果没有掌握那一篇文章,直接看这一篇,估计有点难度,需要回看一下
一 位运算符 | 规律
实例1:
all1 := 1+2+4+8
all2 := 1|2|4|8
执行结果:
15
15
实例2:
all1 := 1+2+3+4
all2 := 1|2|3|4
执行结果:
10
7
二 数据样例
二进制 十进制
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
四项位或 结果:0000 1111 ,二进制 15
这个规律很明显了
1 & 15
0000 0001
0000 1111
结果:0000 0001,二进制 1
2 & 15
0000 0010
0000 1111
结果:0000 0010,二进制 2
12 & 15
0000 1100
0000 1111
结果:0000 1100 ,二进制 12
16 & 15
0001 0000
0000 1111
结果:0000 0000 ,二进制 0
15 ^ 8
0000 1111
0000 1000
结果:0000 0111,二进制 7 ,等同于 15-8
三 得出结论:
1 只有在2的整N次方情况下,位或 1|2|4|8|... 可以看成等同于 1+2+4+8+...
2 上面所说, 1|2|4|8|... 可以看成等同于 1+2+4+8+...,如果要作减法呢,^ 8 等同于15-8
3 求,一个数值,是不是在某个或者某些数值的范围内,用 位与 &操作
四 基础参考数据:
二进制 十进制
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 1000 8
试验:
1 & 1 结果:1
2 &1 结果:0
3 & 1 结果:1
4 & 1 结果:0
5 & 1 结果:1
五 得出结论:
1. 十进制奇数,二进制最后一位 为1 ,偶数 0
2. 偶数与1 位与 结果 0,奇数与1 位与结果 1,所以求奇偶可以用到这一点规律
3. 求一个数,二进制最低位是0还是1呢,除了根据奇偶判断,还有另一种方法, x >>0 &1,这个数据规律其实是用来求:一个十进制,第n位对应的位值,x >> n & 1,以5为例子,求第二位位值,5除以2的二次方,商为1 & 1 ,结果为1
六 使用场景:
根据上面的数据规律,简单讲一下实际使用场景,我们在工作中,经常有用户类型,比如 用户type 1:员工; 2:护理员; 4 : 病人;,实际工作中,会产生一个账号,多个身份的情况,又是员工,又是护理员,又是病人
通常做法 :
1. 联表,一个用户对应分别的用户类型,缺点是,需要联表,效率低
2. 还有一种,避免联表,符号分隔,比如,1,2,4,,缺点,筛查效率低,索引不好
3. 另一种位运算处理方法:如果是员工,数据库存1,如果既是员工,又是护理员,1|2 (3),如果三个身份都有,1|2|4 (7)
~欢迎挑错