4 回答

TA贡献883条经验 获得超454个赞
a += a *= a; 这里并不是几个“算数运算符”和“赋值运算符”,而是两个“复合赋值运算符”:+= 和 *=。 它们的运算顺序是从左到右。
复合赋值运算符运算时会先对左侧操作数求值并记住这个值,然后再对右侧求值,最后再执行赋值。
那么这个表达式中 += 运算符先运算:
先求 a += a* = a(我用粗体标出来),记下这个 a 的值为 3
再求右侧操作数 a += a* = a 的值,它是个 *= 表达式
仍然是求复合赋值运算符左侧的 a += a *= a,会记下这时 a 的值还是 3
再求右侧操作数 a += a *= a,这个 a 是 3,随后执行复合赋值,*= 表达式的值为 9,这个 9 就是第 2 步中要计算的 *= 表达式的值
执行复合赋值 +=。虽然你觉得这时 a 的值应该是 9,但是复合赋值运算时会用之前记下的左操作数的值(也就是第 1 步中记下的 3)
所以最终 a = 3 + 9

TA贡献3593条经验 获得超0个赞

TA贡献58条经验 获得超18个赞
个人理解:
a += a * = a;
因为:a += a 等于 a = a + a;
a *= a 等于 a = a * a;
所以
a = a + ( a * a ) ;代入3 得12。

TA贡献16条经验 获得超6个赞
赋值运算符和复合赋值运算符是从右边开始的,计算顺序为:
a * a → a 先算最右的赋值给a.
a + a → a 再算剩下右面的赋值给a.
如果是a*=a+=a;结果就是18.
添加回答
举报