main()
{double s=1;
int i;
for(i=1;i<=100;i++)
s*=i;
printf("s=%lf\n",s);
}
在这里,%lf表示输出双精度实型。
可S不是无符号型吗?我用%u或者%ld长整型输出都是错误的啊,为什么?
main()
{double s=1;
int i;
for(i=1;i<=100;i++)
s*=i;
printf("s=%lf\n",s);
}
在这里,%lf表示输出双精度实型。
可S不是无符号型吗?我用%u或者%ld长整型输出都是错误的啊,为什么?
%u 是以无符号十进制形式输出整形数
%d 是以有符号十进制形式输出整形数
你没有转换当然出错了
还有printf("s=%lf\n",s);里的“l”表示输出长整型,它只可与d、o、x、u结合使用,你的基础没打好,要多看点书才行
你有一点概念错误。浮点型数据都带符号位,只不过正的可以不写。
“%lf”中的“l”表示“long”, “f”表示“float”。其意思是按照长浮点型格式输出变量s的值。
一个变量的值如果输出的格式不对,就有可能输出完全错误的结果。
整型与实型的存储格式不同,如果按照整型的格式解释实型数,结果是非常可笑的。这也是为什么你用%u和%ld输出的结果不正确的原因。
如果你不能完全理解上面这几句话,说明你对C语言的数据类型没有正确的理解,需要继续学习。
这里有个 隐式的类型转换的问题 。。 s*=i i是整形 s是double 类型的 系统自动 做隐式转换 相当于 s*=(double)i 所以 s 是 double类型的 %u 和 %ld 都不能输出
会失去真
TXT