200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 计算机组成原理浮点数表示

计算机组成原理浮点数表示

时间:2021-02-23 02:18:23

相关推荐

计算机组成原理浮点数表示

浮点数表示

浮点数的表示分为阶码和尾数;

比如3.026*1011;阶码是+11;尾数是3.026;

对于阶码:

阶符为正,小数点向后移n位(n表示阶的大小);

阶符为负,小数点向前移n位(n表示阶的大小);

对于尾数:

数符表示正负,数值表示绝对值的大小;

显然尾数的位数越多,表示的数字的精度越高:

3.026104=30260;

3.0265104=30265;

阶码和尾数的表示:

二进制浮点数如何确定真值?

阶码用E表示,尾数用M表示,r=2(阶码的底数,通常为你是二进制就是2,是十进制就是10,但是也可以是4,8等等);

所以浮点数的真值表示可以有上图公式计算得出;

浮点数的规格化

因此对于b: 010;0.01001;如果采用1B的空间来存储浮点数b的话,那么因为是9位:010001001,所以最后一位1会被舍弃,从而丢失了一些精度;但是数值位的最高位(符号位必须保留)却是0,是无效的数值位;因此对于b可以进行规格化:将尾数的数值位全部左移一位,0.01001变成了0.1001,同时阶码-1:010->001;于是就保留了精度;010 0 01001 -》001 0 1001(8位)

双符号位与溢出的挽救

尾数的表示范围

1.用原码表示的位数的表示范围(数值位的最高位必须是1,如果最高位不是1需要进行规格化,因为最高位是0的话是无效位)

类比定点小数的表示范围:

重述一下顶点小数的补码的表示范围为什么是-1~ 1-2-(n-1):

对于定点整数

设位数一共为8位

原码表示范围为 -127-127,即1111 1111~0111 1111

反码表示范围为 -127-127,即1000 0000~0111 1111

补码表示范围为 -128-127,即1000 0000~0111 1111

我们可以尝试求一下-128的原码,但可以发现7位二进制表示不出来,必须得用8位二进制表示,但这样符号位就被占用了。但由于上面说的补码比原码和补码少一个0的表示方法,这就让补码多了一个10000000来表示其他的数,这里具体的细节我也不是很懂@_@,但可以这样记吧,-1到-127已经有对应的原码和补码了,所以也会有对应的补码,而10000000首位是1代表负数,不能和其他数的表示起冲突所以就是-128了。由此,补码可以表示128个负数,1个0以及127个负数共256个数

对于定点小数

还是设位数一共8位

原码表示范围为1.111 1111 ~0.111 1111,即-127/128到127/128

反码表示范围为1.000 0000~0.111 1111,即-127/128到127/128

补码表示范围为1.000 0000~0.111 1111,即-1到127/128

在这里原码和反码都好理解,就是补码会有一个问题,为什么补码会有一个1.000 0000而且居然对应的值是-1,也就是说如果小数用补码表示的话最小值是-1。这里如果用一开始说的取反加一你会发现根本不是这个值。之后才知道取反加一靠的是原码,但看前面原码的定义公式你会发现原码根本表示不了定点小数-1,原码所能表示的是定点整数-1,定点小数-1这里严谨一点的话其实是-1.0。

这里要求定点小数-1.0的补码的话就要用到上面的补码定义公式了(要不然我怎么会贴hhh),由公式可知,-1.0的补码为2+X = 2-1.0 = 1.000 0000

当然也有这样的理解

总结:由于补码表示0的唯一性,补码比原码少一个-0的表示,多一个-1的表示以及负整数表示范围多了一个-128

PS:主要是把自己最近碰到的问题写一下让自己记牢一些。其实如果把上面贴的几个公式吃透的话这些问题根本不会有的orz,注意对比原码反码补码边界的取值你会发现其实说的就是这些东西orz

有关定点整数和小数的表示范围详细还请参考传送门

对于用补码表示的尾数的取值范围,当符号位是1的时候数值为最高位必须是0,符号位为0的时候,数值位的最高位是1,这样有利于硬件的设计;

补码表示的浮点数的规格化

1.1110100 -> 1.0100000然后110要-3->011;

结果0011;1.0100000;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。