为float指定十六进制值会返回错误的值

时间:2014-06-05 17:41:34

标签: c hex

我是C的新手,我尝试过:

float f = 0x41933333;

这应该给我一个浮点数:18.4但是当我查看内存时,我找到了十六进制值:

66 26 83 4e

,如float:41933333.0000

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

3 个答案:

答案 0 :(得分:2)

0x41933333是一个整数常量。分配给float时,将转换整数。如果需要十六进制浮点常量,则必须明确使用该表示法:

0x0.933333P4

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果要直接插入原始值,请使用union。