赋一个十六进制值给float返回一个错误的值



我是C语言新手,我尝试了以下内容:

float f = 0x41933333;

这应该给我浮点数:18.4,但当我查看内存时,我发现十六进制值:

66 26 83 4e

表示浮点数:41933333.0000

为什么我的十六进制值解释为十进制数?

0x41933333为整型常数。当分配给float时,将转换整数。如果需要十六进制浮点常量,则必须显式使用该表示法:

0x0.933333P4

或者类似的东西—我只是随便猜测一下正确的值是什么,但是0x前缀和P指数是十六进制浮点常数的关键部分。详细信息请参见ISO/IEC 9899:2011中的6.4.4.2浮动常量。

或者,您可以通过将int型的值解释为float

来执行强制转换。
unsigned int n = 0x41933333;
float f = *((float*)&n);

如果您想直接插入原始值,请使用联合。

相关内容

最新更新