理想情况下,以下代码将接受IEEE 754表示的浮点数并将其转换为十六进制。
void convert() //gets the float input from user and turns it into hexadecimal
{
float f;
printf("Enter float: ");
scanf("%f", &f);
printf("hex is %x", f);
}
我不太确定出了什么问题。它正在将数字转换为十六进制数字,但是非常错误。
123.1443 gives 40000000
43.3 gives 60000000
8 gives 0
所以它正在执行某些操作,只是我不太确定具体是什么。
需要帮助,谢谢!
float
会被提升为double
(请参考 James McNellis 的回答)。建议使用printf("hex is %lx", f);
。如果要编写可移植的代码,请比较sizeof(double)
和sizeof(int)
以及sizeof(long)
,然后决定是使用x
还是lx
。 - tomlogicprintf
格式。即使大小恰好匹配,行为也是未定义的。 (来自未来7年的问候。别问我怎么知道的。) - Keith Thompson