计算机组成原理(第六章:计算机的运算方法)

第六章:计算机的运算方法

1.背景

在计算机中参与运算的数就只有两大类: 无符号数和有符号数, 并且这些数都是存储在寄存器当中, 通常寄存器的位数就是机器字长. 
但是在计算机眼里,“+" , "-" 是识别不了的, 所以我们需要别的方法去表示有符号数, 所以后来就出现了用"1"表示负号, 用"0"表示正号.

2.正负数的表示方法

+0.011 在计算机中表示成  0,011 
-0.011 在计算机中表示成  1,011
+1100 在计算机中表示成 0.1100
-1100 在计算机中表示成 1.1100

由上面四个例子可以看出, 小数点可以用 "." 和 "," 来表示. 
首先 小数点 左边的数字 是表示符号位, 小数点右边的数值表示 真值位.  
当一个数是负数, 符号位就用"1"表示.
当一个数是正数, 符号位就用"0"表示.
当一个数是整数, 小数点用 "." 来表示
当一个数是负数, 小数点用 "," 来表示 
真值部分照抄就好了.

形式:  符号(小数点)真值

3.原码表示法

当一个真值 为正数, 它的原码就是他自己(当然需要把它表示成机器数)
当一个真值 为负数, 它的原码首先表示出符号位(0/1)+小数点(./,)+自身数值


例如
X=-1100 X[原]=1.1100
X=-0.0111 X[原]=1,0111

4.补码表示法

 当一个真值 为正数, 它的补码就是他自己(当然需要把它表示成机器数)
 当一个真值 为负数, 它的补码就是它的原码的反码加"1"(除了符号位)


例如: 
X=+1010 X[补]=0,1010
X=-1010 X[补]= (第一步 1,1010  第二步 1,0101   第三步 1,0110 ) 所以答案就是 1,0110

5.移码表示法

无论正负, 补码的基础上, 去掉小数点(,/.), 然后将符号位取反就是移码的表示了

6.数的定点表示和浮点表示

采用顶点表示数的话, 小数点要么在数符和数值之间, 要么在数值之后, 所以其表示范围很小, 并且 这两种表示方法只能表示纯小数和纯整数, 所以一旦有别的数, 就会产生溢出. 
所以我们就直接讲浮点表示了.   其实形式恨科学计数法 差不多了

给出定义式: N = S * R^i
科学计数法: 5.4*10^2

其中S为尾数(可正负)(相当于5.4), i为阶码(可正负)(相当于2), R是基数(进制数)(相当于10)
譬如我一个真值要转换成2进制的浮点数表示法. 那么表明了R就等于2, 然后S等于二进制数(真值), 其中为了表示出进度最高. 通常采用纯小数的形式去表示, 这时就要移动小数点了, 譬如我移动了4位, 但是实际上i不是填4而是填100 (4的二进制表示法),
也就是说当确定了进制数, 尾数和阶码都要转换成进制数的表示方法.

    例如: N= 11.0101 = 0.110101*2^10 = 1.10101*2^1 = 1101.01*2^-10 = 0.00110101*2^100

6.1 浮点数的表示形式

总共4个框 打横来, 首先是阶符然后是阶码的数值部分, 然后是数符, 最后是尾数的数值部分. 

例如: 
    将10进制-54表示成二进制的浮点数

    X=-54 二进制= -110110  浮点数表示法= (-0.110110)*2^110 

    所以其原码(浮点数)=0,110;1.110110 
    所以其补码(浮点数)=0,110;1.001010 
    所以其反码(浮点数)=0,110;1.001001

    That's all!

6.2 后来浮点数的表示形式

3个框框. 首先是数符, 然后是阶码(含阶符),然后是尾数 !!! 特别注意: 阶码用移码来表示

7. 移位运算

为什么要移位填补, 机器字长是固定, 当你左移或者右移时, 必然会使其出现空位, 那么这些空位到底用什么来填补, 用0/1. 

真值为正的时候, 无论是原码补码反码, 左移还是右移 都是用0来添补
真值为负的时候: 对于原码, 无论左移还是右移 用0来填补
真值为负的时候: 对于补码, 左移就用0来补, 右移就用1来补
真值为负的时候: 对于反码, 无论左移还是右移 用1 来填补

这里的左移和右移指的是尾数部分左移还是右移, 不是小数点左右移. 

对于正数,三种机器数移位后符号位不变.
左移时最高数位丢1,结果出错;
右移时最低数位丢1,影响精度。
对于负数,三种机器数移位后符号位均不变.
负数的原码左移时,高位丢1,结果出错;低位丢1,影响精度。
负数的补码左移时,高位丢0,结果出错;低位丢1,影响精度。
负数的反码左移时,高位丢0,结果出错;低位丢0,影响精度。

8.加法与减法运算

加法: 整数: A补+B补 = (A+B)补(mod 2^n+1)
加法: 小数: A补+B补 = (A+B)补(mod 2^n)

减法: 整数: (A-B)补 = A补+(-B)补 (mod 2^n+1)
减法: 小数: (A-B)补 = A补+(-B)补(mod 2^n)

1.对阶: 使两个小数点的位置对顿
首先求出阶差, 再按照小阶向大阶看齐的原则, 使阶小的尾数移位

2.尾数求和: 将对阶后的两尾数 按照加减运算规则来求和

3.规格化: 将尾数规格化 
    1.左规: 当尾数出现00.0.......或者11.1.........需要左规: 将尾数左移一位. 直至 符合00.1..... 或者11.0......
    2.右规: 当出现01.xxxxx或10.xxxxx时, 表示尾数溢出,需要右规: 将尾数右移一位,阶码加1.  

4.舍入: 提高精度       

    1. "0舍1入法" : 当尾数右移时, 被移去最高位是0 则舍去, 如果最高位是1 , 就在尾数末尾加1 
    2. "恒置1法": 尾数右移时, 无论丢掉的最高位是1or0,  都在尾数末尾置为1.

 5. 溢出判断: 判断结果否溢出
  • 14
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值