【发布时间】:2012-05-01 14:12:09
【问题描述】:
对于以下代码:
#include <stdio.h>
int main(){
printf("%f", 5);
printf("%d", 5.01);
}
第一个语句将打印 0.000000,第二个语句将打印一个大数字。
我认为 printf 看到格式 %f 会从堆栈中弹出一个 4 字节的参数。然后我查找了一些参考资料,说 printf 函数会将浮点数转换为双精度,因此是 8 字节参数。所以我认为它可能会打印出一个不可预测的值。但是它怎么能打印出0.000000。
第二个也很奇怪。 5.01的二进制格式应该是0 10000001 01000000101000111101100(0x40A051EC),十进制应该是1084248556,但是语句的结果是1889785610,为什么会这样?
【问题讨论】:
-
未定义的行为。字节序。