首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于类型转换的~不是说int能自动向上double转换的吗,可是结果为什么不一样

2013-12-10 
关于类型转换的~不是说int会自动向上double转换的吗,可是结果为什么不一样code1:#includestdio.hdouble

关于类型转换的~不是说int会自动向上double转换的吗,可是结果为什么不一样
code1:
#include<stdio.h>
double tempinter(double m);/*celsius to fahr*/
main(){
int i;
for(i=0;i<=300;i+=20){
printf("%3.0lf %6.1lf\n",(double)i,tempinter(i));

}
return 0;
}
double tempinter(double c){
double f;
f=9.0/5.0*c+32;
return f;
}
运行结果:
关于类型转换的~不是说int能自动向上double转换的吗,可是结果为什么不一样
code2:
#include<stdio.h>
double tempinter(double m);/*celsius to fahr*/
main(){
int i;
for(i=0;i<=300;i+=20){
printf("%3.0lf %6.1lf\n",(double)i,tempinter(i));

}
return 0;
}
double tempinter(double c){
double f;
f=9/5*c+32;
return f;
}
运行结果:
关于类型转换的~不是说int能自动向上double转换的吗,可是结果为什么不一样

不是说算术运算符中有一个浮点型操作数和一个整型操作数的话,则在运算之前整形操作数会被转换为浮点型的吗?但为何code1与code2的结果不一样呀?到底是怎么转换的?

[解决办法]
9/5 =》 1
[解决办法]

引用:
9/5 =》 1

如他所说,关键在f=9/5*c+32;这句话上。
因为C/C++里的'*'和'/'运算符的优先级是一样的,并且结合方向都是从左到右,所以先算9/5。
所以这句话相当于是f=(9/5)*c+32;
由于9和5都是普通的整形常量,结果得1。接下来才是1*c+32。这时候c是double类型,所以会转型。
你也可以这么写f=((double)9)/5*c+32;这样的话结果就和前一个一样了。

其实,你只要拿编译后的汇编代码来看看就明白了。也许你会发现,经过了编译器的优化,系统甚至都不会求9/5这一步。。。。

热点排行