移位运算
左移
在二进制表示下把数字同时向左移动,低位以\(0\)填充,高位越界后舍弃。
\[1 << n = 2^n , n << 1 = 2n
\]
算术右移
在二进制补码表示下把数字同时向右移动,高位以符号位填充,低位越界后舍弃。
\[n >> 1 = \lfloor \frac{n}{2.0} \rfloor
\]
算术右移等于除以\(2\)向下取整,(-3)>>1=-2,3>>1=1。
值得一提的是,“整数/2”在C++中实现为“除以2向零取整”,(-3)/2=-1,3/2=1。
逻辑右移
在二进制补码表示下把数字同时向右移动,高位以\(0\)填充,低位越界后舍弃。
C++语法没有规定右移的实现方式,使用算术右移还是逻辑右移由编译器决定。一般的编译器均使用算术右移。

浙公网安备 33010602011771号