一个简单的式子分析,只帮我看看若a为int类型,且其值为3,则执行完表达式a+=a -=a*a 后,a的值是 ( C )

一个简单的式子分析,只帮我看看
若a为int类型,且其值为3,则执行完表达式
a+=a -=a*a 后,a的值是 ( C )
A) -3 x05B) 9 x05C) –12 x05D) 6
疑问:是从右往左运算?那最后一步a=a+(-6) ,也应该是3+(-6) ,应该是 -9啊 ,a不等于3吗?为何答案是-12
【解析】考查复合赋值运算符的运算规则.
第一步运算 a*a,结果是9;
第二步运算 a -=9,等价于a=3-9=-6,因此a的值及表达式a-=9的值均是-6;
第三步运算 a+=-6,等价于a=a+(-6),于是a的值及表达式a+=6的值均是-12.
zhihan2871453 1年前 已收到1个回答 举报

a554341740 幼苗

共回答了27个问题采纳率:81.5% 举报

答:因为你忽略了赋值.
第一步运算 a*a,结果是9; a=3; ok
第二步运算 a -=9,等价于a=3-9=-6,从这步开始,a=-6;a不再是3.
第三步运算 a+=-6,等价于a=a+(-6)=(-6)+(-6)=-12,

1年前 追问

6

zhihan2871453 举报

那请问第一次 结果等于9,为什么不赋值给a ,那么a 就应该等于 9了,为何到第二步才赋值给 a 第一步: a-=a*a 那么a*a 等于9 那么,9不是应该赋值给a 吗

举报 a554341740

无赋值符号。 第一次没有进行赋值的。只是进行a*a运算。 可以验证的。

zhihan2871453 举报

a+=a -=a*a 的 a*a 前面有= ,有赋值符号的呀,怎么回事???

举报 a554341740

恩,的确有“=”。 不过很可惜,前面还有个“-”。 C语言规定优先级,算术运算优先于赋值运算。 所以,a-=a*a ,即a=a-a*a ,即a=3-3*3=-6.

zhihan2871453 举报

请问,最后一步,a+= 前面也有一个"+", 那为何要把- 6赋值给前面的a ,而第一步按您说的,有“-” 就不把9 赋值给a , 而最后一步却把 -6 赋值给了前面的a ??? 最后一步 a+=-6 ,应该是 a=a+(-6) ,那应该是 3+(-6) 啊,但是答案却不是这样

举报 a554341740

在第二步,a-=a*a ,即a=a-a*a ,即a=3-3*3=-6.。注意:从这步结束,a=-6;. 然后到最后一步a+=-6;即a=a+(-6)=-6+(-6)。 并不是在最后一步把 -6 赋值给了前面的a 。
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 18 q. 0.096 s. - webmaster@yulucn.com