ieee-754 - IEEE 754 转十进制

标签 ieee-754

我目前正在尝试将以下 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。这不等于转换器给我的,我不明白为什么。我错了什么?

最佳答案

根据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

关于ieee-754 - IEEE 754 转十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869968/

相关文章:

javascript - IEEE 754 中 Infinity 的用例是什么

C++ 将 float 转换为字符串

c++ - 双 - IEEE 754 替代品

c++ - 浮点格式和 isinf()

javascript - 为什么 9007199254740995 四舍五入为 9007199254740996

floating-point - 42 可以精确表示为 float 吗?

c++ - 了解 std::isnan 的编译结果

types - 为什么 IEEE754 单精度 float 只有 7 位精度?

c - 如何在c89中定义浮点 double 常量

python - ldexp 和 frexp 在 python 中如何工作?