计算机组成原理——第二章(11)

这个小节我们讲一下定点数的移位运算,包括原码、反码、补码的移位运算,还有逻辑移位和循环移位是如何运算的

定点数的移位运算

1.算数移位

1.1原码

原码的算数移位——符号位保持不变,仅对数值位进行移位。记住是数值位,假设是对12.3的右移,那么就是把数值位右移,相对来说就是小数点左移,变成1.23。

需要注意的是,有人会把右移或者左移看成是乘法或除法,其实这是不对的,我们举个例子,二进制1,0000101  为-5D,右移之后为1,0000010 为-2D,按理来说应该是-2.5D,但是结果是-2D,丢失精度

还有一个例子1,1010000 为-80D左移一位之后为1,0100000 为-32D,按理来说左移是*2但是出现了严重误差

所以做题的时候还是按照数值位移,再转进制,安全保险一点

1.2反码

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

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

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

负数的反码数值位于原码相反

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

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

1.3补码

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

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

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

负数的补码运算,以最右边的1为分界线,左移之后右边都补0,右移之后左边都补1

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

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

总结如下:

2.逻辑移位

逻辑移位比较简单,我们可以把逻辑移位看出“无符号数”的算数移位

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

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

 逻辑移位应用举例

比如我们要存储一种颜色,大家都知道颜色是由RGB调整来的,我们要存这样的一种颜色

用3B存储无符号数102,并且逻辑左移16位

 

然后用3B存储无符号数139,并逻辑左移8位

 

然后用3B存储无符号数139

 

把三个得到的结果相加得3B的RGB值

 

3.循环移位

 循环移位就是把挤出来的数字放到空出来的位置

这里要分成两类:带进位位的循环移位和不带进位位的循环移位

不带进位位:用移出的位补上空缺

带进位位:移出的位放到进位位,原进位位补上空缺

其实这两种处理方式是一样的,都是移了之后移出的位补上空缺

 例如不带进位位的循环左移:10110101,左移之后出来的1补到最低位

带进位位的循环左移:1,10110101,左移之后出来的1补到最低位

 

 

 思维导图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值