在枚举中使用位移运算,来判断层叠块

来源:互联网 发布:php 推送代码 编辑:程序博客网 时间:2024/05/16 02:09

如:k1=2 ; //添加

      k2=4 ; //删除

      k3=8; //修改


purview = k2|k3; // 赋给添加和删除权限



解释:

第一,2的8位二进制值为00000010

         4的8位二进制值为00000100

         8的8位二进制值为00001000


第二,当对8和4进行按位或(|)操作后,结果为:

                 4|8 = 12

                 00000100 |00001000 = 00001100

为什么会是这样呢?在进行按位或操作时 00000001|00000001=00000001 ; 00000001|00000000=1 ; 00000000|00000000=00000000

也就是说除了0|0结果是0外,其它运算结果的都是1

所以    00000100 |00001000 = 00001100

也就说上面的 purview = k2|k3 的二进制值结果是 purview =00000100 |00001000 =00001100



第三,当对8和4进行按位与(&)操作后,结果为:

               4&8=0

            00000100 &00001000 = 00000000

同样为什么会是这样呢?在进行按位与操作时 00000001&00000001=00000001   ;00000001&00000000=00000000 ;00000000&00000000=00000000

也就是说除了1&1结果是1外,其它运算结果的都是0

 所以 00000100 &00001000 = 00000000



           上面的if((purview & k1) >0)的结果就是 00001100&00000010 =00000000 也就是(0>0)=false

           同样if((purview & k2) >0)的结果就是 00001100&00000100 =00000100=4=k2 也就是 (4>0)=true





原创粉丝点击