用计算机计算绝对值的方法,计算机组成原理(一)——计算机中的运算方法

tips:原码补码正负数的关系;原码补码表示范围;移位运算可能出现错误和精度降低;溢出,上溢,下溢;

第一次写博客,希望能和大家交流一下。如果觉得宝宝写得还可以,求爸爸点个赞!刚起步的小学渣需要支持??

如有错误,希望能评论一下,我会修改,共同进步!冲鸭!(用颜色表示求赞的决心!)

计算机中的运算方法

无符号数和有符号数

真值(正负号)和机器数(0和1,即原码),都是二进制数。

原码(2^n + x)、补码[2^(n+1) + x]、反码[2^(n+1)-1 + x]  ——都是X为负数的时候变化。

移码 (2^n + x)      ——无论正负都要变化,不涉及小数,通常做阶码。1表示+,0表示-。

相反数的关系:

原码:符号位取反

反码:包括符号位全部取反

补码:包括符号位全部取反后加一

补码和移码无论正负数(包括0)符号位相反,数值位相同。

0的表示:移码和补码正负数的表示相同。原码和反码都有+-0之分。

表示范围(8位):

无符号数:【0,2^8-1】

原码:【-(2^7-1),+(2^7-1)】

反码:【-(2^7-1),+(2^7-1)】

补码:【-128,+(2^7-1)】-128的补码规定为1000 0000

数的定点表示和浮点表示

定点表示:没有特定的硬件表示小数点,用约定的方式表示。位于符号位后一位或者最小位后一位。

浮点表示:N=S×r^j;S,j都为小数,且可正可负。

675537c62029875816162391959e25fa.png

定点运算

溢出的判断

单符号位:符号位的进位和最高位的进位做异或,1表示有溢出

双符号位(补码用):00为+,11为 - ;01表示上溢(两个正数溢出),10表示下溢(两个负数溢出)。只有同符号数相加,才可能溢出。

移位运算

左移扩大2倍,右移缩小2倍

左移丢1(负数补码丢0),出现运算错误;右移丢1,精度降低。

原码

左移

右移

0,1101(13)

0,1010(10)❌

0,0110(6)精度降低

0,0110(6)

0,1100(12)✔

0,0011(3)✔

补码

左移

右移

1,0011(-13)

1,0110(-10)❌

1,1001(7)✔

补码丢0,没有精度丢失,

0舍1入为7

逻辑移位:无符号数的移位。左移右移都补0。

算术移位:原码:都补0;补码:左移补0,右移补符号位;正数补0,负数补1

原码乘法

c569b9983d0b41259885716412b1c078.png

符号位单独运算做异或,数值部分绝对值进行乘法运算

n次加,n次移位

逻辑右移:最低位最先运算,右移把最低位算出的结果移到总结果的最低位,所以右移。绝对值进行乘法运算,而且可能发生溢出,所以逻辑移位。

a0fbb72ec63af30a41d4ae5dfd39441b.png

ps:实际结果为0.1011,0110由于位数有限,所以结果为0.1011。而且右移过程可能会出现精度降低问题。

补码乘法——Booth算法

与原码乘法相同的区别:(假设x×y)

符号位参与运算,最后的符号位自动生成。

补码右移(算术右移)

乘数后添加一位0。判断a = Yn+1-Yn,若a<0,部分积+【-x】补;若a>0,加【x】补;若a=0,加0。

d2b45211a7da5115e15dd3520419003f.png

浮点数的规格化

原码:无论正负,第一位为1

补码:符号位和第一位不同

(基数不同规格化有区别,通常考原码,基数为2,第一位不为0;基数为4,前两位不为0;……)

特例:[-1/2]补 = 1.10000不是规格化数。[-1]补=1.00000是规格化数。

左归:尾数左移一位,阶码减1,直到符号位和第一位不同。左归可能归多次。

右归:当尾数溢出时(出现01,10),需要右归,尾数右移一位,阶码加1。右归只归一次。

浮点数的加减运算

对阶;(小阶向大阶看齐。防止出现溢出)求阶差。

尾数求和。

规格化。

舍入(0舍1入;恒置1)多计算两位,判断舍入。

例1  两浮点数x = 2101×0.11011011,y = 2111×(-0.10101100)。假设尾数在计算机中以补码表示,可存储10位尾数,2位符号位,阶码以补码表示,双符号位,求x+y。

解:将x,y转换成浮点数据格式

[x]浮  =  00 101, 00.11011011

[y]浮 = 00 111, 11.01010011+1

00 111, 11.01010100

步骤1:对阶,阶差为Ex-Ey

-Ey=11000+1=11001

Ex-Ey=00101+11001=11110=-2        Ex-Ey<0     ExX阶码加2      X尾数右移2位

[x]浮 = 00 111, 00.00110110(11)

步骤2:尾数求和

[X+Y]浮 =  00 111, 00.00110110(11)

+ 00 111, 11.01010100

= 00 111, 11.10001010(11)  ——多写两位,用于舍入

步骤3:计算结果规格化

[X+Y]浮 为非规格化数,左归一位, 阶码减一,

00110, 11.00010101(1)

步骤4:舍入处理

[X+Y]浮 = 00 110, 11.00010110   (0舍1如法)

[X+Y]浮 = 00 110, 11.00010101   (截去法)

逻辑实现(最后再补)

目录

计算机中的运算方法

无符号数和有符号数

数的定点表示和浮点表示

定点运算

溢出的判断

移位运算

原码乘法

补码乘法——Booth算法

浮点数的规格化

浮点数的加减运算

逻辑实现(最后再补)

目录

计算机中的运算方法

无符号数和有符号数

数的定点表示和浮点表示

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值