提问者:小点点

浮点数的有效数和指数如何在内部表示?


我有一些疑问,试图更好地理解浮点数是如何在内部表示的,也许你可以帮助我。所以,我主要研究IEEE754规范,它说浮点数应该有:

1 bit for significand's sign
8 bits for exponent
23 bits for significand precision
(I'm taking the Single-precision format here)

正如你所看到的,它说1位是专门为有效符号保留的,所以它让我认为有效符号实际上是使用符号和大小表示来表示的,对吗?(说真的,我在网上找不到这种信息)如果答案是肯定的,那么为什么选择符号和大小表示而不是二补码?如果答案是否定的,那么为什么为符号保留1位?

关于指数,我对它的表示也有一些疑问。我在书/维基上读到指数是一个带有偏差编码的无符号数。然而,显然指数必须同时代表正数和负数,所以我的问题是:指数可以根据应用程序进行不同的解释?例如,如果我需要将我的指数用作双补数,如果它是一个无符号数,我该如何做?

非常感谢!我有点迷茫,所以如果你能给我一个完整的解释,我会非常感激!


共2个答案

匿名用户

您通常应该避免直接操作IEEE二进制浮点数的内部。您的编程语言和库通常会处理转换和格式化输出。大多数计算机都有硬件算术。

我只针对你的具体问题给出一个大纲。维基百科有一篇文章,单精度浮点格式,很好地涵盖了这个主题,带有图表和示例。

数字确实以符号和大小的形式存储。

对于普通数字,实际有效数的最高有效位数必须是1,因此不存储。

指数存储为实际指数和偏差127的总和,以确保非负位模式。该系统的好处是浮点数之间的比较更简单。两个极端指数位模式,0和所有位,都经过特殊处理。

匿名用户

>

  • 是的,它是符号和大小表示。但是,在内部,您的处理器可能会在2的补码表示中编码尾数。例如:

    --对于减法,其中一个尾数必须以-ve编码,实际上处理器选择指数值最低的那个,因此对尾数部分进行2的补码减法。

    -对于加法和乘法,不需要内部2的补码,但实际上尾数加法是正2的补码表示。

    如果您使用的是std,任何x86机器。不,指数总是以这种方式表示无符号表示-(2^(n-1)-1)其中n是指数部分的宽度。对于单精度,n=8因此偏置2^(n-1)-1=127,您只需要执行此操作并将其存储在带符号的变量中,例如intin c, c.

    为了理解指数部分,我们以单精度为例:

    --00000000,表示代数和零表示。

    --00000001,表示可能的最低指数,即1-127=-126

    --00000010,表示下一个指数=-125,依此类推。

     .....
    

    --11111110,表示最大可能指数=254-127=127

    --11111111,表示溢出和NaN。