C ++浮点表示

时间:2014-04-02 16:39:26

标签: c++ floating-point

我正在尝试从here获得的十六进制表示创建float。对于32.50002的表示,该站点将IEEE 754十六进制表示显示为0x42020005

在我的代码中,我有:float f = 0x42020005;。但是,当我打印该值时,我会1.10E+9而不是32.50002。为什么是这样?

我正在使用Microsoft Visual C ++ 2010。

3 个答案:

答案 0 :(得分:5)

通过float=变量指定值时,不指定其内部表示,而是指定其值。十进制的0x42020005是1107427333,这是您要分配的值。

无法以独立于平台的方式检索float的基础表示。但是,做出一些假设(即,float实际上是使用IEEE 754格式),我们可以耍一下:

float f;
uint32_t rep = 0x42020005;
std::memcpy(&f, &rep, sizeof f);

会给出理想的结果。

答案 1 :(得分:1)

0x42020005int,其值为1107427333。

float f = 0x42020005;等于 float f = 1107427333;

答案 2 :(得分:1)

0x42020005实际上是int值1107427333.

您可以试用此代码。应该工作......使用union:

union IntFloat {
  uint32_t i;
  float f;
};

并在需要转换值时调用它。

union IntFloat val;
val.i = 0x42020005;
printf("%f\n", val.f);