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

有网友解释相似的题目说老谭的书讲只要这类都是double型,可是我的这个答案怎么是float?... 有网友解释相似的题目说老谭的书讲只要这类都是double型,可是我的这个答案怎么是float? 展开
 我来答
猪头或火宝宝
推荐于2016-03-25 · TA获得超过2758个赞
知道小有建树答主
回答量:1001
采纳率:0%
帮助的人:1509万
展开全部
你好!!!
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
wssiqi
2010-09-25 · TA获得超过751个赞
知道小有建树答主
回答量:582
采纳率:100%
帮助的人:591万
展开全部
你定义C为float,最后c就是float
虽然b+d-c的结果是double型,
但最后赋值给c时都要强制转为float型
毕竟c(float)只占4个字节的空间,你怎么把8个字节的内容(double)直接放进去呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花落花开那一年
2010-09-25 · 超过20用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:25.5万
展开全部
高 double <--float
^ ^
| |
| long
| |
| unsignd
| |
低 int <-- char,short
由低到高!注意这个不是一层一层的变的(int->unsigned->long->long)
int->long,int->double都是可行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
athlomes
2010-09-25 · 超过13用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:16.2万
展开全部
这个是肯定要发生隐式转换的,你小类型和大类型做运算,就会发生这样的情况
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zrj_bd
2010-09-25 · TA获得超过1870个赞
知道小有建树答主
回答量:647
采纳率:100%
帮助的人:1090万
展开全部
这个c的类型肯定是double的
这是数字类型转换的基本规则,有double参与运算,则结果肯定是double的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式