[英]C++ floating point representation
我试图从我从这里得到的十六进制表示形式创建一个float
。 对于32.50002
的表示32.50002
,该站点将IEEE 754十六进制表示形式表示为0x42020005
。
在我的代码中,我有: float f = 0x42020005;
。 但是,当我打印该值时,得到的是1.10E+9
而不是32.50002
。 为什么是这样?
我正在使用Microsoft Visual C ++ 2010。
当通过=
为float
变量分配值时,不分配其内部表示,而是分配其值。 十进制的0x42020005是1107427333,这就是您要分配的值。
float
的基础表示无法以独立于平台的方式进行检索。 但是,做一些假设(即, float
实际上是使用IEEE 754格式的),我们可以欺骗一下:
float f;
uint32_t rep = 0x42020005;
std::memcpy(&f, &rep, sizeof f);
将给出期望的结果。
0x42020005
是一个int
,其值是1107427333。
float f = 0x42020005;
等于float f = 1107427333;
0x42020005
实际上是0x42020005
的int
值。
您可以尝试此代码。 应该工作...使用联合:
union IntFloat {
uint32_t i;
float f;
};
并在需要转换值时调用它。
union IntFloat val;
val.i = 0x42020005;
printf("%f\n", val.f);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.