我正在编写这个程序,我注意到,使用%f表示双精度型,使用%d表示浮点型,会给我带来完全不同的结果。有人知道为什么会这样吗?
int main ()
{
float a = 1F;
double b = 1;
printf("float =%d\ndouble= %f", a, b);
}这是输出
float = -1610612736
double = 190359837192766135921612671364749893774625551025007120912096639276776057269784974988808792093423962875123204096.0000发布于 2010-02-17 00:19:21
由于变量参数的工作方式,除了%d和%f之外,C不知道您实际传递给它的值的类型。当你传入一个变量参数时,你基本上就是在做(void*)&myvalue,因为编译器和运行时的函数都不能确定变量的类型,除了格式化字符串中给出的类型。因此,即使有隐式转换可用,编译器也不知道需要它。
在大多数系统中,双精度是8个字节,而浮点数是4个字节。因此,这两种类型并不是二进制兼容的。这就像试图将字符串解释为双精度类型或其他不兼容的类型。
https://stackoverflow.com/questions/2274336
复制相似问题