IEEE 754 转十进制

Posted

技术标签:

【中文标题】IEEE 754 转十进制【英文标题】:IEEE 754 to decimal 【发布时间】:2014-02-19 02:43:06 【问题描述】:

我目前正在尝试将以下 IEEE 754 十六进制数 0x805c00f0 转换为其十进制等效值,根据在线转换器,它约为 -8.44920195816662938E-39。在纸上一步一步地计算出来,我得到了以下信息:

805c00f0 = 1000 0000 0101 1100 0000 0000 1111 0000 最左边的 1 表示该数字为负数。接下来的八位 000 0000 0 表示减去偏差后的指数为 -127。我只剩下 101 1100 0000 0000 1111 0000 位,尾数。

回忆隐含的1后,我有-1.101 1100 0000 0000 1111 0000 * 2^-127。将小数点向左移动 127 位,我得到 -0.00(...)1101 1100 0000 0000 1111 0000。总结起来,我得到 -1(2^(-127)+2^(-128)+2^ (-130)+2^(-131)+2^(-132)+2^(-143)+2^(-144)+2^(-145)+2^(-146)) = -1.01020727331947522 E-38。这不等于转换器给我的,我不明白为什么。我哪里错了?

【问题讨论】:

为了它的价值,我使用 binaryconvert.com/result_float.html?hexadecimal=805C00F0 来检查我的答案 如果你们也被难住了,没关系。在你思考这个问题时,我至少想听听你的意见。 【参考方案1】:

per wikipedia “存储的指数 00 和 FF 被特别解释。”使用的公式是 (−1)^(signbits)×2^(−126)×0.(significandbits)

805c00f0 =>
8 0 5 c 0 0 f 0 =>
1000 0000 0101 1100 0000 0000 1111 0000 =>
1 00000000 101 1100 0000 0000 1111 0000 =>
-1 x 2^(-126) x 0.10111000000000011110000 =>
-1 x 2^(-126) x (2^-1 + 2^-3 + 2^-4 + 2^-5 + 2^-16 + 2^-17 + 2^-18 + 2^-19) =>
-1 * (2^-127 + 2^-129 + 2^-130 + 2^-131 + 2^-142 + 2^-143 + 2^-144 + 2^-145) =>
-8.449202e-39

【讨论】:

我明白了。因此,当指数为 00000000 或 ffffffff 时,我们会以不同的方式处理它吗?...需要研究一下。非常感谢!

以上是关于IEEE 754 转十进制的主要内容,如果未能解决你的问题,请参考以下文章

将十进制数表示成ieee754标准的32浮点规格化数 27/64

以IEEE754短浮点数格式表示十进制数:-3.125 要求写出过程,并最终用十六进制缩写形式表示

IEEE 754标准如何转换?

将十进制转换为 IEEE-754 格式

从 IEEE 754-2008 十进制浮点数据转换为二进制浮点格式

将 IEEE754 转换为十进制的方程(标准化形式)