前、后端都有必要掌握的计算机理论,计数法-下篇

173 阅读3分钟

上一篇,讲了计数法-原码-反码-补码-位运算(二进制、十进制)理论,如果没有掌握那一篇文章,直接看这一篇,估计有点难度,需要回看一下

一 位运算符 | 规律

实例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)

23.png

~欢迎挑错