算数移位
移位:通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法
原码的算数移位
例如原码为 10101000 进行算数移位
原码的算数移位——符号位保持不变,仅对数值位进行移位。
- 右移:高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位≠0,则会丢失精度
- 左移:低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位≠0,则会出现严重误差
反码的算数移位
反码的算数移位——正数的反码与原码相同,因此对正数反码的移位运算也和原码相同。
- 右移:高位补0,低位舍弃。
- 左移:低位补0,高位舍弃
反码的算数移位——负数的反码数值位与原码相反,因此负数反码的移位运算规则如下,
- 右移:高位补1,低位舍弃。
- 左移:低位补1,高位舍弃。
补码的算数移位
补码的算数移位——正数的补码与原码相同,因此对正数补码的移位运算也和原码相同。
- 右移:高位补0,低位舍弃。
- 左移:低位补0,高位舍弃。
补码的算数移位——负数补码=反码末位+1 导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。
规律——负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码
负数补码的算数移位规则如下:
- 右移(同反码):高位补1,低位舍弃。
- 左移(同原码):低位补0,高位舍弃。
逻辑移位
- 逻辑右移:高位补0,低位舍弃。
- 逻辑左移:低位补0,高位舍弃。
可以把逻辑移位看作是对“无符号数”的算数移位
逻辑移位的应用举例
例如颜色RGB分别存储的数据为:
R = 102 01100110
G = 139 10001011
B = 139 10001011
需要将三个灰度值合成一个才能成彩色图像
循环移位