什么是32位IEEE浮点值CC4C0000的十进制等值?

时间:2015-07-27 09:31:49

标签: hex decimal ieee-754 floating-point-conversion

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

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放入此网址时

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

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

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

你的思路是正确的,你没有犯任何错误。

-1.59375 * 2 ^ 25 = -53477376

这正是您链接的webapp给我的答案。仔细检查你在最后的乘法过程中没有发现任何愚蠢的错误。

答案 1 :(得分:0)

这里有几个假设:

  • 字节处于“网络”顺序(即首先是更重要的字节)
  • 格式是IEEE 754(但公平地说我不知道​​它可能是什么其他IEEE格式..)

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

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

我不能肯定地说这是给出假设的“正确答案”,但它应该为你提供一个工具来确定它。

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