为什么这两个printf输出的结果不一样?

printf("%d\n",1E5); 出来是0
但是在一个变量里面,这样:
int a=1E5;
printf("%d\n",a);出来是正确的100000,为什么?

printf("%d\n",1E5); 是错误语句。因为1E5是浮点型,而%d是整型控制符,所以输出为0。
int a=1E5;已把浮点数1E5隐含转换成整型变量a了,所以后边用printf("%d\n",a)输出就正确了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-27
你试试printf("%f", 1E5);或者printf("%lf", 1E5);就知道了。这两种都能打印100000.000000。
这是因为1E5其实被视为浮点数类型,直接用%d输出时,输出的结果取决于浮点数的保存格式。
你用int a = 1E5时,强制将1E5类型转换成了整形,所以之后用%d能正常输出。本回答被提问者采纳
第2个回答  2013-12-27
1E5是浮点型的,如果直接打印的化,取决于浮点数在内存中的存储方式,你如果学过数字逻辑,这个是会讲到的,但是如果你把一个浮点型的赋值给整型,会进行隐式转换的,其实a的中值已经不是1E5的值了
第3个回答  2013-12-27
1E5是浮点型常量,前面的printf中把%d改成%f就好了,后面是由于定义时将1e5转换成int型了所以能正常输出
相似回答