C语言中a=2,a-=a*=3;为什么结果是0

 我来答
NMNUM
2019-12-24
知道答主
回答量:9
采纳率:0%
帮助的人:4688
展开全部
乘等也是个赋值操作,顺序就是楼上老哥说的自右向左,毕竟得先得到右边的值才能计算呀;
加上括号后:a-=(a*=3);
再分解下:第一步a*=3,看上去有点唬人,其实就是a=a+3,而第二步a-=a,为a=a-a;

先算a*=3; //a=2*3,a=6,这一步后a已经不再是2,而是6
再算a-=a; //a=6-6 ,所以a=0
因为复合赋值运算符的效率比a=a+b好,所以这种a=a+b的情况一般就写成a+=b;
不信你拿出笔和纸,写写a=a+b和a+=b,第一个写了两次a,而第二个只写了一次,计算机也一样,a=a+b计算了两次a,a+=b只计算了一次a;
CJJohn
2019-12-24 · Persistence is harder than eff...
CJJohn
采纳数:475 获赞数:1362

向TA提问 私信TA
展开全部
C语言是从右往左执行a-=a*=3,所以最后一步就是a-=a,当然就是0了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2019-10-21 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
连等运算的顺序是自右向左的,a-=a*=3相当于
a*=3

a-=a (即a=a-a //无论a的值是啥,这一步都会赋值为0)
追问
a*=3不是相当于a=a乘3吗?
追答
是呀,所以这一步是a=6,但下一步就是a-=a,所以a*=3那步是什么都无所谓了,最后都会是0
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jeepfly2001
2019-12-24 · TA获得超过1493个赞
知道小有建树答主
回答量:1609
采纳率:71%
帮助的人:651万
展开全部
可以化为a=a-(a=a*3),这个表达式从右向左求值,a=a-a,所以无论a为任何值,表达式都为0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式