我做的第一件事就是把它转换成二进制,所以我得到了
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
答案不同,我的错误在哪里?
感谢您的帮助:)
答案 0 :(得分:1)
你的思路是正确的,你没有犯任何错误。
-1.59375 * 2 ^ 25 = -53477376
这正是您链接的webapp给我的答案。仔细检查你在最后的乘法过程中没有发现任何愚蠢的错误。
答案 1 :(得分:0)
这里有几个假设:
使用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