浮点数的阶码怎么计算_计算机组成原理-Third

进制运算

进制:使用有限种数字符号来表示无限的数值,使用的数字符号的数目称之为这种进制的基数或者底数。比如说,n=10,称之为十进制。

不常见的进制:

  • 二十进制:出现在玛雅文明的玛雅数字,因努伊特的因努伊特数字
  • 六十进制:事件、坐标或者是角度等量化的数据
  • 十六进制:计算机的网卡、MAC地址
  • 八进制:计算机的常见数据类型

为什么计算机喜欢十六进制和八进制呢?

计算机喜欢二进制,但是二进制表达往往太长了,使用大进制位就可以解决这个问题,恰巧十六进制和八进制是2的n次方。

有符号数与无符号数

原码表示法:使用0表示正数,1表示负数,规定数值的第一位是符号位。例如,+237:011101101,-237:111101101。

但是,原码表示法不能满足计算机的要求。第一,0有两个表示方法。第二,原码进行运算非常复杂,特别是两个操作数的符号不同的时候:首先判断两个操作数的绝对值的大小,使用绝对值大的数减去绝对值小的数,对于符号值,以绝对值大的为准。

因此,我们希望找到不同符号操作数更加简单的方法;希望找到使用正数代替负数的方法;希望使用加法操作代替减法操作,从而消除减法。

补码表示法:n表示原码x的位数

f25dd54f0eeedd826dde635d0e73a147.png

由于补码表示法依然使用了减法运算,因此需要找出原码与补码之间的规律,消除转换过程中的减法。由此,产生了反码表示法。

反码-补码的定义:

4b2dc9c8a27a751824a524518c2b534a.png

整数-小数补码的定义:

4415c18a6232ab101baec4ab423dfd38.png

规律(整数规律):

  1. 负数的反码等于原码除了符号位以外,按位取反。
  2. 负数的补码等于反码加1

原码、补码、反码的关系:

e81b0c6013853d16fad95eeb933c1955.png

定点数与浮点数

定点数

小数点固定在某个位置的数,称之为定点数。分为三种,第一种,把小数点放到符号位和数值位之间,称之为纯小数;第二种,把小数点放到数值位的后面,称之为纯整数。第三种,非纯小数非纯整数。将纯小数或者纯整数乘以比例因子,以满足定点数的保存格式。

浮点数

为什么需要用到浮点数?

  1. 计算机处理的很大程度上不是纯小数或者纯整数。
  2. 数据范围往往很大,定点数难以表达,不是也不够灵活。

浮点数的表示形式:尾数必须是纯小数,尾数的最高位必须是1。

3d637cacd86f1793c54d494e2d9d0a14.png

浮点数在计算机中如何储存?

0c4974ef20542f216686014d98742a56.png

举例:

0627265886542e65612fbb21ab1490ab.png

浮点数的表示范围

假设阶码数值取m位,尾数数值取n位。阶码能表示的最大值是(2^m)-1,表达范围是[-((2^m)-1),(2^m)-1];尾数所能表示的最大值是1-2^(-n),尾数表示的最小值时2^(-n),尾数的范围是[-(1-2^(-n)),-2^(-n)]和[2^(-n),1-2^(-n)]。

  • 上溢:数的绝对值太大了
  • 下溢:数的绝对值太小了

浮点数的表示范围,图示:

607d8b4ac95ee06d4aeb477fb70fc97d.png
  • 单精度浮点数:使用4个字节、32位表达浮点数
  • 双精度浮点数:使用8个字节、64位表达浮点数

定点数与浮点数对比:

  • 定点数与浮点数位数相同时,浮点数的表示范围更大
  • 当浮点数的位数为规格化的小数时,浮点数的精度更大
  • 浮点数运算包含阶码与尾数,浮点数的运算更为复杂

浮点数在表示范围、精度、溢出处理、编程等方面均优于定点数;而定点数在运算规则、运算速度、硬件成本方面由于浮点数。

定点数的加减法运算

运算方法一:通过补码

eee40a34b6cc037c46f7cb9c9b781c05.png

运算方法二:

整数的加法、小数的加法:数值位与符号位一同运算,并且将符号位产生的进位自然丢掉,这一步就是mod2^(n+1)或者是mod2的操作。

什么是溢出?

假设A用8位数表示,B也用8位数表示。A+B的结果用8位数存不下来,这种情况叫做溢出。

如何判断溢出?

双符号位判断法,原来用单符号位表示的数用双符号位表示,比如0用00表示,1用11表示。双符号位产生的进位同样丢弃掉,如果结果的双符号位不同,表示溢出。

减法运算:-B的补码等于B的补码连同符号位,按位取反,末位+1

a16b06d33c7f9e72c51fb0883bd45341.png

浮点数的加减法运算

步骤

对阶→尾数求和→尾数规格化→舍入→溢出判断。

示例的模型:S表示尾数,r表示基数,j表示阶数

562924373e04f7bfaf003439331e737d.png

对阶

使两个浮点数阶码一致,使尾数可以进行运算。原则是,小阶看齐大阶。

例如:y的阶码比x的阶码大,x要变成和y的阶码一样。此时,x的位数变成了6位,需要舍去最后面的2位。

dfda05f3557ebc41c4d373b0c25ffce7.png

5c241e294f92eb36165f9c043b36acc1.png

尾数求和

和定点数的求和规则是一样的

尾数规格化

S代表尾数,需要判断两种情况,S>0和S<0的情况,需要满足图下的格式:

589f2cbc1fb66b4f1a940f6ba35744f3.png

如果不满足这种格式,或者说符号位与最高位不一致,需要进行移动,同时阶码相应变化,以满足规格化的要求。

尾数规格化一般是数字左移,但是少部分情况需要数字右移。比如,双符号位不一致,定点数运算溢出。右移后,需要进行舍入的操作。

舍入

0舍1入法。如果右移之后,舍去末位的是1,则在舍去之后,需要+1,得到结果。每次一右移,阶码要+1。

溢出判断

定点数判断溢出使用双符号位不一致表示溢出,在浮点数中并不适用,因为浮点数可以通过右移,使符号位变得一致。方法是,通过阶码的双符号位判断是否发生溢出。如果尾数规格化之后,阶码双符号位不一致,则认为该浮点数发生了溢出。

浮点数运算的图示:

f4c84254a15fd3de49f68858a26d8bf4.png

浮点数的乘除法运算

  • 乘法:阶码相加,尾数相乘
  • 除法:阶码相减,尾数相除

之后需要进行,尾数规格化→舍入→溢出判断。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值