C语言中a=2,a-=a*=3;为什么结果是0
4个回答
展开全部
乘等也是个赋值操作,顺序就是楼上老哥说的自右向左,毕竟得先得到右边的值才能计算呀;
加上括号后: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;
加上括号后: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;
展开全部
C语言是从右往左执行a-=a*=3,所以最后一步就是a-=a,当然就是0了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
连等运算的顺序是自右向左的,a-=a*=3相当于
a*=3
a-=a (即a=a-a //无论a的值是啥,这一步都会赋值为0)
a*=3
a-=a (即a=a-a //无论a的值是啥,这一步都会赋值为0)
追问
a*=3不是相当于a=a乘3吗?
追答
是呀,所以这一步是a=6,但下一步就是a-=a,所以a*=3那步是什么都无所谓了,最后都会是0
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以化为a=a-(a=a*3),这个表达式从右向左求值,a=a-a,所以无论a为任何值,表达式都为0.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询