移位运算

左移

在二进制表示下把数字同时向左移动,低位以\(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++语法没有规定右移的实现方式,使用算术右移还是逻辑右移由编译器决定。一般的编译器均使用算术右移。

posted @ 2021-04-14 12:22  Dazzling!  阅读(201)  评论(0)    收藏  举报