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如何把他们拼接在一起?
这个时候我们就需要逻辑移位,让他们先移动到自己应该在的地方,然后再把他们相加就可以了
循环移位
循环移位
带进位的循环左移
循环移位图片说明
使用循环移位就可以把一组数据倒换(reversed)
知识总结
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!