为什么a最后等于-12而不是-3

假设已有整型变量a,其值为3,试计算表达式: a+=a-=a*a的值。 main()

{ int a=3;

printf("%d\n",a+=a-=a*a); }

a+=a-=a*a是一个连续赋值运算,计算顺序是自右至左

a+=a-=a*a;------------相当于:1.a-=a*a;     2.a+=a;

即相当于:1.a=a-a*a;    2.a=a+a;

1.a=a-a*a=3-3*3    = -6;

2.a=a+a=(-6)+(-6)   = -12;

  1. 这个顺序是这样的,首先计算a*a=9。
  2. 计算后面的a-=9,也就是a=a-9,结果为-6,但是这个时候a=-6了。
  3. 最后计算a=a+(-6),因为上一步计算的同时赋值a为-6了,所以式子应该是a=-6+(-6)=-12

先计算a=a-a*a,此时,a值变为-6,再计算a=a+a,所以a的值为-6+-6=-12