C++浮点表示

Gar*_*eth 0 c++ floating-point

我试图float从我从这里得到的十六进制表示创建一个.为表示32.50002,该站点将IEEE 754十六进制表示为0x42020005.

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

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

Kon*_*lph 5

float变量via =赋值时,如果不分配其内部表示,则赋值.十进制的0x42020005是1107427333,这是您要分配的值.

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

float f;
uint32_t rep = 0x42020005;
std::memcpy(&f, &rep, sizeof f);
Run Code Online (Sandbox Code Playgroud)

会给出理想的结果.

  • @KonradRudolph这是正式未定义的行为.标准的_intent_显然是一个实现定义它来给出预期的结果,但IIRC,g ++没有.(如果你编写类似`float f = 0.0;*reinterpret_cast <uint32_t*>(&f)= 0x42020005; std :: cout << f;`,你可能最终输出0.)正式定义的唯一方法是使用`memcpy`.(但我倾向于使用`reinterpret_cast`和/或`union`,具体取决于我所针对的编译器.) (2认同)