意义:学会一些位操作能够提升程序的执行效率。
简介:按位逻辑运算符:按位取反(~),按位与(|),按位与(&),按位异或(^)
移位运算符:左移(<<) ,右移(>>)
注意:!!!!上述除了按位取反是单目(一元)运算符,其他的都是二目(二元)运算符,还有这些都可以用赋值运算符的例如<<= ,>>=,&=等等
按位逻辑运算符:
按位与(&)
运算:两边都为1才是1,否则都是0;
作用:1.能够判断一个数是否为偶数(偶数的二进制最后一位应该是0)
2.掩码:使用按位与运算符任何与0组合都得0,1号位的值不变,这个过程叫做“使用掩码”,因为掩码中的0隐藏了flags中相应的位。
3.关闭位(清空位):对应位设置为0,其他位设为1,1&任何都得原来的值,不改变原来的数字,而为0,无论是什么对应位都变成0
4.检测特定位
按位或(|):
运算:两边对应位是0才是0其余的都是1
作用:1.打开位(设置位):其他位设置位0,需要打开的位设置位1,因为设置为1最后或运算肯定是1
按位取反(~):
运算:对应位1变0,0变1.
作用:1.只适用于整体取反,限定位数了还是很难做到
按位异或(^):
运算:同为0异为1
作用:1.限定位置去取反(需要取反的位置用1,其他位置用0)
2.可以用来交换两个变量(优点是不用占据内存,缺点是可能比较难以理解)
移位运算符:
左移(<<):
左侧运算对象每一位的值向左移动右侧运算对象指定的位数,左侧运算对象移出左末端位的值丢失,右侧补0.
右移(>>):
左侧运算对象每一位的值向右移动运算对象指定的位数,右侧运算对象移出右末端的值丢失,对于无符号类型,用0来填充空出的位置;对于有符号类型,其结果取决于机器。也就是空出来的位置可用0填充,或者用符号位的副本来填充
作用:在计算2的多少次方的时候提供快速有效的乘法除法。