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

如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?... 如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用? 展开
 我来答
402407
推荐于2018-03-12 · TA获得超过771个赞
知道小有建树答主
回答量:726
采纳率:50%
帮助的人:901万
展开全部
不是运算符取整,之所以取整的原因是,类型转换!

数据类型的转换一般分为隐含转换和强制转换两种;
隐含转换
算术运算符 关系运算符 逻辑运算符赋值运算符等二元运算符要求两个运算符的类型一致,算术运算 关系运算中参与运算的类型不一致时要进行隐含转换,原则是将低类型转化成高类型(类型越高数据精度越高,double>float>unsigned long>long >int>short>char>)这种转化是电脑自动完成,是安全的,数据精度没有损失;
强制转换
一般涉及到将高类型转化成低类型时使用,不安全,可能在精度的损失,有两种方法
1类型说明符(表达式)//c++强制转化符号
2(类型说明符)表达式 //c强制转化符号;
如 float z=7.56;
int a;
a=int(z);或a=(int)z;

i-=j*=x+y表达式分解如下:
double tmp1 = (double)x + y;
j = int( (double)j * tmp1 ); // j =int( 5.0 *7.5) =37
i-=j; // i = 3 - 37 = -34;
百度网友21a360264
2011-12-31 · TA获得超过1855个赞
知道小有建树答主
回答量:640
采纳率:100%
帮助的人:359万
展开全部
答案在j*=这里,要赋值给j,必然要进行强制转换成整型,即由j*=7.5的结果j=37
i-=j,i=-34
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd9006
2011-12-31 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
i-=j*=x+y
===>
i=i-(j*(x+y)),最后因为i是整数,自动取整舍去小数
追问
i是整形没错,不过在运算过程中已经转换成double类型啦,表达式的值的类型不应该是最高的级别double形吗?那么怎么会是整数呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xxcc309
2011-12-31 · TA获得超过409个赞
知道小有建树答主
回答量:403
采纳率:0%
帮助的人:332万
展开全部
就是-34.5
追问
但是答案是-34.5···确定吗?
追答
确定的,你可以看下C语言的强制转化一章
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式