怎么样的运算过程?

来源:百度知道 编辑:UC知道 时间:2024/07/07 15:38:51
int a=3;
a+=a-=a*a;
printf("%d",a)
结果为什么是-12?
=的运算不是右赋值给左吗?只要计算a*a就可以了?为什么结果是-12
a+=a+a,a-=a-a,a*a
3+3=3-3=3*3
6=0=9
?????????????????

-=的优先级低于*所以是先运算*,然后两个赋值都是从右到左算得,所以顺序应该是,
1. a*a =9 此时 a 依然等于 3
2. a-=a*a 相当于 a = a - (a * a ); 这样a就等于 3-9 = -6
3. a+=a-=a*a 相当于 a+=(a-=a*a);这样a 就等于-6 + -6 = -12 。

a=a-a*a 等于-6
这时a=-6
a=a+a 等于-12