我们在平时抄题解做题时,常常会看到“<<”、“>>”之类的符号,这些看上去狂甩酷拽吊炸天的符号就是位运算。
这里我简单说一下位运算符号。
一、 &
对于这个符号,大家更常见的双&。单&意为按位或,把参与运算的两个数对应的二进制位相与,只有对应的两位都为“1”时,结果的对应为才为1,否则为0。
如,9的二进制位00001001,7的二进制位00000111,两个数只有最后一位都是1,故9&5的运算结果为00000001,输出1。
二、|
与&类似,双|表示或,单|表示按位或。将参与运算的两数对应的二进制位相或,只要对应为有一个是“1”,结果的对应为就为1。
如,9的二进制位00001001,7的二进制位00000111,两数相或得到的就是00001111,输出结果为15。
三、^
^是按位异或,把参与运算的两个数对应的二进制位相异或,若对应位的数字不同,即一个为0、另一个为1时,结果的对应位为1,若相同则为0。
如,9的二进制位00001001,7的二进制位00000111,两数按位异或的运算结果为00001110,输出结果为14。
四、~
这是取反,把运算数的各个二进制为按位求反,即0变1,1变0。
如,9的二进制位00001001,求反后是11110110。需要注意的是,用于计算的数字要放在~后边,9取反要写~9。
以上四种位运算在实际做题中遇见的较少,至少我遇到的比较少。
这并不代表它们不重要,在某些情况下使用以上4中位运算会更加便利。
题目中比较常见的位运算是左移和右移。
一、左移
左移符号是“<<”,即两个小于号,使用格式为a<<b,它的意思是将a的二进制的每一位都向左移动b位,如,1 << 2,即将1 每一位都向左移动2位,于是,00000001就变成了00000100,从1变成了4。
左移n位,原数就变成 原数 * 2^n。
二、右移
右移符号是“>>”,使用格式同左移,为a>>b,表示a的每一位都向右移动b位,4>>2即将4的每一位都向右移动2位,从00000100变为00000001。
右移n位,原数就变成 原数 / 2^n。
左移和右移在一般的计算中要快一点,能起一定的优化作用。