【计算机基础|计算机组成原理】【14】移位运算

移位运算

算术移位

  • 例:985.211

小数点后移1位 => 9852.11 => 985.211 * 10^1
小数点后移2位 => 98521.1 => 985.211 * 10^2
小数点前移1位 => 98.5211 => 985.211 / 10^1
小数点前移2位 => 9.85211 => 985.211 / 10^2
  • 通过改变各个数码位和小数点的相对位置,从而改变各个数码位的位权。可用移位运算实现乘法、除法

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

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

  • 左移:低位补0,高位舍弃。若舍弃的位=0,则相当于乘以2;若舍弃的位!=0,则会出现严重误差

  • 反码的算术移位

  • 正数:正数的反码与原码相同,因此正数反码的移位运算也与原码相同

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

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

  • 负数:负数的反码数值位与原码取反,因此负数反码的移位运算如下

  • 右移:高位补1,低位舍弃

  • 左移:低位补1,高位舍弃

  • 补码的算术移位

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

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

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

  • 负数:负数的补码数值位是反码末位+1,因此负数补码的移位运算中,找到反码最右边的数值0改为1,以1为中心,1的左边与反码相同,1的右边与原码相同

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

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

  • 例:-20 * 7

7D = 1 + 2 + 4 = 111B = 2^0 + 2^1 + 2^2
-20 * 7 = -20 * (2^0(不移位) + 2^1(左移1位) + 2^2(左移2位))
算术移位中,不管是什么码,左移相当于乘以2,右移相当于除以2
由于位数有限,因此有时候无法用算术移位精确的等效乘除法

逻辑移位

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

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

  • 例:RGB:102,139,139

R = 102 = 01100110
G = 139 = 10001011
B = 139 = 10001011
  • 用3B存储R值的无符号数102,并逻辑左移16位:01100110 00000000 00000000

  • 用3B存储G值的无符号数139,并逻辑左移8位:00000000 10001011 00000000

  • 用3B存储B值的无符号数139,并逻辑左移0位:00000000 00000000 10001011

  • 通过相加得3B的RGB值:01100110 10001011 10001011

可以把逻辑移位看作是对无符号数的算术移位

循环移位

  • 循环左移:高位移出的1位,放置到低位空出的1位

  • 循环右移:低位移出的1位,放置到高位空出的1位

  • 由于加法运算最高位进位超出机器字长,自算计硬件会包含CF用于记录进位,不断往高位进行计算。

  • 带进位循环左移:高位移入CF,低位存储原CF的数值

  • 带进位循环右移:低位移入CF,高位存储原CF的数值

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值