14移位运算[大章]

移位运算

知识总览

定点数的表示和运算

定点数的表示和运算

移位运算

移位运算

原码的算术移位

算术移位

移位:通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法

右移

算术的右移(除法)如果舍弃的位不等于0那么就会丢失精度

原码的算数移位:符号位保持不变,仅对数值位进行移位。

右移:高位补0,低位舍弃。若弃的位=0,则相当于:2;若弃的位#0,则会丢失精度

右移

左移

左移:低位补0,高位舍弃,若舍弃的位=0,则相当于X2;若舍弃的位≠0,则会出现严重误差

左移

反码的算术移位

如果是正数,那么反码的算术移位和原码相同

如果是负数,那么反码数值位与原码相反,因此负数反码如果出现了空白位那么需要补的不是0而是1

图解

补码的算术移位

正数的补码和原码相同,因此正数的补码移位运算也和原码相同

  • 右移:高位补0, 低位舍弃
  • 左移:低位补0,高位舍弃

反码的算术移位比较复杂
因为负数的补码=反码末位+1,导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止

$$
\begin{align*}
&x[原]10010100\
&x[反]11101\underline{0}11 \
&x[补]11101100 ,左边为我们在反码的基础上末位+1后\
\end{align*}
$$

补码移位

可以看到因为负数补码的特殊性,所以当我们在对补码补数的时候应该遵循:

  • 右移(同反码) :高位补1,低位舍弃。
  • 左移(同原码) :低位补0,高位舍弃。

规律总结

算术移位的应用举例

算术移位的应用举例

$$7D = 111B = 20+21+2^2$$
此时我们的×2就可以使用算术移位和加法来进行运算

逻辑移位

逻辑移位

逻辑右移:高位补0,低位舍弃。
逻辑左移:低位补0,高位舍弃。

和原码的移位一样

逻辑移位的应用

RGB

我们使用RGB如何把他们拼接在一起?
这个时候我们就需要逻辑移位,让他们先移动到自己应该在的地方,然后再把他们相加就可以了

循环移位

循环移位
循环移位GIF

带进位的循环左移
带进位的循环左移

循环移位图片说明
循环移位

使用循环移位就可以把一组数据倒换(reversed)

知识总结

知识总结