位运算符
位运算符的基本规则
位运算符指向整数的二进制数字形式
- 按位与运算基本规则:1&1=>0 1&0=>0 0&1=>0 0&0=>0
- 按位或运算基本规则:1 | 1=>1 1 | 0=>1 0 | 1=>1 0 | 0=>0
- 按位非运算:~1=>0 ~0=>1
- 异或运算:1^1=0 0^0=0 1^0=1 0^1=1
按位与运算:
形式:A & B //A和B常规为十进制数字,不管是哪种形式都会转为2进制进行按位与运算得到结果然后转换为原来的形式
举例:$r1 = 9 $ 13 //$r1结果为:1001 & 1101=>1001=>9
按位或运算:
形式:A | B //A和B常规为十进制数字,不管是哪种形式都会转为2进制进行按位或运算得到结果然后转换为原来的形式
举例:$r1 = 15 | 13 //$r1结果为:10010 & 01101=>11111=>31
按位左移运算:
形式:A << n //将A转为2进制进行左移n位,最左边n位移出去,最右边n位添0
举例:$r = 9 <<2,解释如下:
数字9 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
左移2位 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
$r1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
结果为36.
按位右移运算:
形式:A >> n //将A转为2进制进行右移n位,最右边n位移出去,最左边n位添0
举例:$r1 = 9 >> 2,解释如下:
数字9 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
右移2位 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
$r1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
结果为2
按位非
将一个数字的二进制形式的每一个数字取反的到结果
按位异或
将两个数字的二进制形式进行异或得到的结果
管理一组事物的开关状态
开关状态:某类数据只有两个值:true、false、1、0
一组事物:多个数据的任意可能出现的状态
假设有五个灯泡,每个灯泡都用一位2进制来表示,于是可以得到每个灯泡单独亮时的所表示的数字
- 第一个灯泡:const d1=1; //二进制表示:00000001
- 第二个灯泡:const d2=2; //二进制表示:00000010
- 第三个灯泡:const d3=4; //二进制表示:00000100
- 第四个灯泡:const d4=8; //二进制表示:00001000
- 第五个灯泡:const d5=16; //二进制表示:00010000
需解决的问题如下:
确定一个灯泡的开关状态:
语法:$s1 = $state & dn //n表示1-5之间的任意一个,当$s1>0时,表示第n个灯泡亮;否则暗
打开指定的灯泡:
语法:$s1 = $state | dn //n表示1-5之间的任意一个
关闭指定的灯泡
语法:$s1 = $state & ~dn //n表示1-5之间的任意一个