32 位 IEEE 浮点值 CC4C0000 的十进制等效值是多少?

What is the decimal equivalent of the 32-bit IEEE floating point value CC4C0000?

我做的第一件事就是将它转换成二进制,所以我得到

CC4C0000 = 1100 1100 0100 1100 0000 0000 0000 0000

现在我知道这个数字是负数,因为符号位(二进制表示中的第一位是1)。

指数是接下来的 8 位,即 10011000,等于 2^7 + 2^4 + 2^3 = 128 + 16 + 8 = 152

现在小数部分就是剩下的23位100 1100 0000 0000 0000 0000。

现在我的问题是,真正的指数是多少?

应该是 152-127 = 25 对吧?

小数部分是.100 1100 0000 0000 0000 0000

重新插入前导后,我们得到 1.100 1100 0000 0000 0000 0000。

现在我知道 .100 1100 0000 0000 0000 0000 等于 0.59375

所以最后的答案应该是 -1.59375 x 2^25.

但为什么不是正确答案。

当我把 cc4c0000 放入这个 url

http://www.h-schmidt.net/FloatConverter/IEEE754.html

答案不同,我的错误在哪里?

感谢您的帮助:)

这里有几个假设:

  • 字节按 "Network" 顺序排列(即重要字节在前)
  • 格式是 IEEE 754(但公平地说,我不知道它可能是什么其他 IEEE 格式..)

使用 Python 我可以使用 unhexlify 命令将您的十六进制字符串数据转换为字节字符串,然后 struct.unpack 将其作为 IEEE 754 读入 ...

struct.unpack('!f', unhexlify('CC4C0000'))
(-53477376.0,)

我不能确定这是否是您给定假设的 "correct answer",但它应该为您提供确定它的工具。

python struct 模块的文档在这里:https://docs.python.org/2/library/struct.html#format-characters

你的思路是正确的,没有出错。

-1.59375 * 2^25 = -53477376

这正是您链接的网络应用给我的答案。仔细检查你在最后的乘法中没有犯任何愚蠢的错误。