位运算符与管理一组事物的状态问题

位运算符

位运算符的基本规则

位运算符指向整数的二进制数字形式

  1. 按位与运算基本规则:1&1=>0    1&0=>0    0&1=>0    0&0=>0
  2. 按位或运算基本规则:1 | 1=>1    1 | 0=>1    0 | 1=>1    0 | 0=>0
  3. 按位非运算:~1=>0    ~0=>1
  4. 异或运算: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进制来表示,于是可以得到每个灯泡单独亮时的所表示的数字

  1. 第一个灯泡:const d1=1;    //二进制表示:00000001
  2. 第二个灯泡:const d2=2;    //二进制表示:00000010
  3. 第三个灯泡:const d3=4;    //二进制表示:00000100
  4. 第四个灯泡:const d4=8;    //二进制表示:00001000
  5. 第五个灯泡: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之间的任意一个

猜你喜欢

转载自blog.csdn.net/su_yi_song/article/details/87109467