我正在开发这个程序,我注意到用%f表示一个double和用%d表示一个float给了我完全不同的东西。有人知道为什么会这样吗?

int main ()
{
 float a = 1F;
 double b = 1;

 printf("float =%d\ndouble= %f", a, b);
}

这是输出
float = -1610612736
double = 190359837192766135921612671364749893774625551025007120912096639276776057269784974988808792093423962875123204096.0000

最佳答案

由于变量参数的工作方式,除了%d%f之外,c不知道实际传递的值的类型。当您传入一个变量参数时,您基本上是在执行(void*)&myvalue操作,因为编译器和运行时的函数都不能确定变量的类型,除非格式化字符串中给出了什么。因此,即使存在可用的隐式转换,编译器也不知道是否需要它。
在大多数系统中,double是8字节,float是4字节。所以这两种类型不是二进制兼容的。这就像试图将字符串解释为double或其他不兼容的类型。

07-24 09:45
查看更多