【发布时间】:2011-02-25 19:59:52
【问题描述】:
理想情况下,以下代码将采用 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。 -
你怎么知道它是 IEEE 754?
-
@tomlogic:对于可移植代码,不要将浮点值传递给
printf,其格式需要整数。即使大小恰好匹配,行为也是未定义的。 (来自未来 7 年的问候。不要问。)
标签: c floating-point ieee-754