【发布时间】:2011-01-17 11:25:21
【问题描述】:
我正在研究这个程序,我注意到将 %f 用于 double 并将 %d 用于 float 给我带来了完全不同的东西。有人知道为什么会这样吗?
int main ()
{
float a = 1F;
double b = 1;
printf("float =%d\ndouble= %f", a, b);
}
这是输出
float = -1610612736
double = 190359837192766135921612671364749893774625551025007120912096639276776057269784974988808792093423962875123204096.0000
【问题讨论】:
-
请参阅§7.21.6.1 The
printffunction 的 C11 规范(或fprintf()的 POSIX 规范)以获取有关如何正确使用printf()的信息以及 §6.5.2.2 Function calls ¶6 and 7 有关浮点参数传递方式的信息可变参数函数。现代 C 编译器(如 GCC 和 Clang)很容易为格式不匹配提供广泛的诊断——您应该启用编译警告。
标签: c printing floating-point double printf