这个printf如何在这个程序中工作 - 在c中进行说明?

时间:2012-03-19 21:39:25

标签: c printf

需要一些澄清......

为什么我将2.50 0 0 0.0作为输出?

#include<stdio.h>
int main()
{
    float a=5.0,b=2.0;
    printf("%f %d\n",a/b,a/b);
    printf("%d %f",a/b,a/b);
    return 0;
}

1 个答案:

答案 0 :(得分:4)

您正在导致未定义的行为,因为a/b的类型(提升为)double,与格式说明符%d不匹配(期待int)。

(你看到0的原因可能是因为你碰巧访问的sizeof(int)个字节都是零,是{{1}这个简单数字的(非常​​短的)尾数的一部分},并且您的平台以小端顺序将浮点数存储为IEEE754:

2.5

尝试 | <-- * --> // * = sizeof(int) 400 | 4 0000 0000 0000 // == 2.5 S+E | Mantissa 查看其他一些结果。)