理想情况下,下面的代码将采取IEEE 754表示一个浮子,并将其转换为十六进制转换IEEE 754浮点数与C诅咒 - printf的
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
作为参数传递给一个可变参数函数(如printf()
),它提升为double
,这是两倍大的帮助,将不胜感激
''float'在各种函数中被提升为'double'(请参阅James McNellis的回答)。尝试'printf(“十六进制是%lx”,f);'而是。对于可移植代码,请查看sizeof(double)与sizeof(int)和sizeof(long)的比较,以确定是使用“x”还是“lx”。 – tomlogic 2010-06-01 15:17:24
你怎么知道它是IEEE 754? – 2015-06-04 14:08:01
@tomlogic:对于可移植代码,不要将浮点值传递给'printf',其格式需要一个整数。即使尺寸恰好匹配,行为也是未定义的。 (来自7年的问候,不要问) – 2017-07-28 17:31:49