【发布时间】:2019-06-21 21:41:48
【问题描述】:
我的印象是 C 浮点数有 8 位指数和 23 位尾数。
所以一个是 0011 1111 1000 0000 0000 0000 0000 0000 = 0x3F800000。
但是,以下代码生成 1.06535e+09 而不是 1。 谁能帮我理解为什么?
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
float i = 0x3F800000;
cout<<i << endl;
return 0;
}
【问题讨论】:
-
我很确定你没有将那个位模式分配给
i,而是那个特定的整数。 -
我想弄清楚为什么你认为
0011 1111 1000 0000 0000 0000 0000 000或0x3F800000应该等于1。你能解释一下这背后的思考过程吗? -
这不是标准的 IEEE 表示吗?见这里en.wikipedia.org/wiki/Single-precision_floating-point_format
-
虽然我已经很多年没用过C了,但我一直认为
float和double的具体表示取决于目标架构,而不是C标准。我的印象不正确吗? -
@EricJ。看起来像这样。它将十六进制转换为无符号整数并将无符号整数转换为浮点数。如何直接将十六进制分配给浮点数?