c语言题目:若有下列定义:char a;int b;float c;double d;c*=b+d-c,则c的类型为?

有网友解释相似的题目说老谭的书讲只要这类都是double型,可是我的这个答案怎么是float?

你好!!!
char a;int b;float c;double d;
c*=b+d-c这个表达式中含有不同的数据类型,那么编译器就会自动把低级类型向高级类型转换(当然这个转换是自动转换的)即编译器会把char ,int, float 转换成double的类型,
c*=b+d-c但是我们定义变量c是float类型的,那么这个计算结果就会强制转换成float,然后把转化后float类型的数据在赋值给变量c.

总结:在有不同类型的计算中,都会把低级运算想高级运算自动转化,要是表达式中都float,那么其他低于float类型的都会转化成float,要是有double也是如此。
但是注意一点:编译器在计算的时候是按等级最高的类型计算的,计算的只是表达式结果的类型,那要是把高级类型的几个赋值给低级类型,会发出自动转换。比如:
char a;int b;float c;double d;
表达式a+b+c+d,那么这个表达式中最高的类型就是double,那么表达结果的类型就是double,但是我们可把double类型赋值给int 类型:int x=a+b+c+d,那么此时x的类型还是int
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-25
你定义C为float,最后c就是float
虽然b+d-c的结果是double型,
但最后赋值给c时都要强制转为float型
毕竟c(float)只占4个字节的空间,你怎么把8个字节的内容(double)直接放进去呢?
第2个回答  2010-09-25
高 double <--float
^ ^
| |
| long
| |
| unsignd
| |
低 int <-- char,short
由低到高!注意这个不是一层一层的变的(int->unsigned->long->long)
int->long,int->double都是可行的
第3个回答  2010-09-25
这个是肯定要发生隐式转换的,你小类型和大类型做运算,就会发生这样的情况
第4个回答  2010-09-25
这个c的类型肯定是double的
这是数字类型转换的基本规则,有double参与运算,则结果肯定是double的