c语言问题数据问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 04:51:44
有如下程序:正常输出是x=3.000000,y=4.166667,m=-30336,n=362880
而如果把printf中的x=%f改为x=%d,则输出变为x=0,y=0.000000,m=-1431658496,n=-1988083696.错误的只是x=%d,为什么会使后面的都错误的???
main()
{
float x,y;
long m,n;
x=3/2+8/3;
y=3.0/2+8.0/3;
m=1*2*3*4*5*6*7*8*9;
n=1L*2*3*4*5*6*7*8*9;
printf("x=%f,y=%f,m=%ld,n=%ld\n",x,y,m,n);
}

这个问题比较复杂,如果你是初学者,不建议你深究,
只要知道这个是由于你的数据输出格式和实际数据类型不匹配造成的,就行了。

如果你是高阶程序员,
我建议你看一下IEEE754标准。
这种现象和两个原因有关:
1.这个程序中临时变量的连续的声明,导致他们的存储区域相连
2.这个和float型的内存布局相关,编译系统将这些变量的数据区误读为格式区导致的

%d表示按整型输出 而你定义的X为float