移位运算符
'>>' 和 '<<' 都是位运算符的一种,都是直接对二进制位操作的运算符。'>>' 和 '<<' 的具体作用就是对二进制位进行移动操作,一般只能对整型变量进行操作。
1、'>>' —— 右移
将二进制数整体向右移动。由于一个变量的位数是一定的,对于移出范围的位要舍弃,移入范围的位要补上0。
如下图,我们默认在8位下进行运算:
不难发现,每向右移动一位,相当于在原数的基础上除以2(与 int型 /2 舍弃小数部分相符)。
2、 '<<' —— 左移
将二进制数整体向右移动。由于一个变量的位数是一定的,对于移出范围的位要舍弃,移入范围的位要补上0。
如下图,我们默认在8位下进行运算:
不难发现,每向左移动一位,相当于在原数的基础上乘以2。
3、注意
我们的移位运算符的移位规则时算术移位而非逻辑移位,所以上面其实是理想化情况的讲解,但并不影响结果。对于实际操作需要明白,当移动完最高位空缺时,最高位补充的应该是符号位。如果都是补0的话,会对原数的正负性产生影响。
总结
一般来说,移位运算比直接进行乘除法快很多,因为计算机底层很多计算的基础都是移位来完成的。
移位运算也应用在很多方面,比如说计算幂次的时候,移位操作比pow函数快很多的。
未完待续...