需要一些澄清......
为什么我将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;
}
答案 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
查看其他一些结果。)