单精度浮点数中的阶码的表示范围为啥不是0~255?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单精度浮点数中的阶码的表示范围为啥不是0~255?相关的知识,希望对你有一定的参考价值。

参考技术A 几乎所有计算机都支持二进制数据表示,即能直接识别二进制数据表示并具有相应的指令系统。通常采用的二进制定点数据表示主要有:符号数值、反码、补码以及带偏移增值码四种形式,其中最常用的是补码形式,这些都已在计算机组成原理课程中做了详 参考技术B 几乎所有计算机都支持二进制数据表示,即能直接识别二进制数据表示并具有相应的指令系统。通常采用的二进制定点数据表示主要有:符号数值、反码、补码以及带偏移增值码四种形式,其中最常用的是补码形式,这些都已在计算机组成原理课程中做了详细讨论,这里不再阐述。
二进制浮点数的表示,由于不同机器所选的基值、尾数位长度和阶码位长度不同,因此对浮点数表示有较大差别,这就不利于软件在不同计算机间的移植。美国IEEE(电子及电子工程师协会)为此提出了一个从系统结构角度支持浮点数的表示方法, 称之为IEEE标准754(IEEE,1985),当今流行的计算机几乎都采用这一标准。
IEEE 754在标识符点数时, 每个浮点数均由3个部分组成:符号位S,指数部分E和尾数部分M。
浮点数可采用以下四种基本格式:
(1)单精度格式(32位):E=8位,M=23位。
(2)扩展单精度格式:E≥11位,M≥31位。
(3)双精度格式(64)位:E=11位,M=52位。
(4)扩展双精度格式(64位):E≥15位,M≥63位。
其中,单精度格式(32位)中的阶码为8位, 另有一位尾数的符号位S,处在最高位。如图4.2.1所示。应该指出的是,浮点数的分数部分与有效位部分两者是不同的, 由于IEEE754标准约定在小数点左部有一位隐含位,从而使其有效位实际有24位,这样便使尾数的有效值变为1M。阶码部分采用移码表示, 移码值为127,从而使阶码值的范围由原来的1到254,经移码后变为-126到+127。

IEEE 754标准的单精度和双精度浮点数表示格式。其中,阶码值0和255分别用来表示特殊数值:当阶码值为255时,若分数部分为0,则表示无穷大;若分数部分不为0,则认为这是一个‘非数值’。当阶码和尾数均为0时则表示该数值为0,因为非零数的有效位总是≥1,因此特别约定,这表示为0。当阶码为0, 尾数不为0时,该数绝对值较小, 允许采用比最小规格化数还要小的数表示。概括起来,由32位单精度所表示的IEEE 754标准浮点数N可以有如下的解释:
若E=0,且M=0,则N为0。
若E=0,且M≠0,则N=(-1)S·2-126·(0.M)。为非规格化数。
若1≤E≤254,则N=(-1)S·2E-127·(1.M)。为规格化数。
若E=255,且M≠0,则N=NaN(‘非数值’)。
若E=255,且M=0,则N=(-1)S∝(无穷大)。
由此可见, IEEE 754标准使0有了精确表示,同时也明确地表示了无穷大,所以,当a/0(a≠0)时得到结果值为±∞;当0/0时得到结果值较小的数,为了避免下溢而损失精度,允许采用比最小规格化数还要小的数来表示,这些数称为非规格化数(Denormalnumber)。应注意的是,非规格化数和正、负零的隐含位值不是1而是0。
下面举两个例子来说明IEEE 754标准浮点数的表示:

(1)N=-1.5,它的单精度格式表示为:

1 01111111 10000000000000000000000

其中,S=1,E=127,M=0.5,因此N=-1.5。

(2)以下的32位数所表示的单精度浮点数为多少?

1 10000001 01000000000000000000000

其中,S=1,E=129,M=0.25,由公式可知N=-5。本回答被提问者采纳

关于IEEE754中的浮点数的阶码的表示问题

标准是说阶码是用移码表示,但是我不太理解:
例如:对于单精度浮点数,如果阶码是 -1,那么加上偏置值127之后就是126,然后,阶码就表示成:
0111 1110,这不是126的原码吗?
而且 -1 的移码不是:0111 1111吗?
不太理解这如何可以跟移码联系起来,求解答。

参考技术A 指数部分(阶码)即使用所谓的偏正值形式表示,偏正值为实际的指数大小与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是−126~+127加上偏移值127 ,指数值的大小从1~254(0和255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小。

这里移码实际上偏正值,和二进制中的不一样的

以上是关于单精度浮点数中的阶码的表示范围为啥不是0~255?的主要内容,如果未能解决你的问题,请参考以下文章

IEEE754浮点数表示法中阶码的范围是多少?

关于IEEE754中的浮点数的阶码的表示问题

关于IEEE754标准浮点数阶码的移码

C语言 浮点数的阶码和尾数的长度是有限制的,超过的部分该如何处理?会有啥影响?

ieee754单精度浮点数 表示方法

什么是浮点数格式?