为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?

[复制链接]
查看11 | 回复4 | 2018-3-12 22:25:41 | 显示全部楼层 |阅读模式
不是运算符取整,之所以取整的原因是,类型转换!数据类型的转换一般分为隐含转换和强制转换两种;隐含转换算术运算符 关系运算符 逻辑运算符赋值运算符等二元运算符要求两个运算符的类型一致,算术运算 关系运算中参与运算的类型不一致时要进行隐含转换,原则是将低类型转化成高类型(类型越高数据精度越高,double>float>unsigned long>long >int>short>char>)这种转化是电脑自动完成,是安全的,数据精度没有损失;强制转换一般涉及到将高类型转化成低类型时使用,不安全,可能在精度的损失,有两种方法1类型说明符(表达式)//c++强制转化符号2(类型说明符)表达式 //c强制转化符号;如 float...
回复

使用道具 举报

千问 | 2018-3-12 22:25:41 | 显示全部楼层
答案在j*=这里,要赋值给j,必然要进行强制转换成整型,即由j*=7.5的结果j=37i-=j,i=-34...
回复

使用道具 举报

千问 | 2018-3-12 22:25:41 | 显示全部楼层
i-=j*=x+y===>i=i-(j*(x+y)),最后因为i是整数,自动取整舍去小数...
回复

使用道具 举报

千问 | 2018-3-12 22:25:41 | 显示全部楼层
就是-34.5...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行