C语言这个自增自减怎么算的啊

跪了 求计算步骤哇!
例1:int n=9;n%=n%=2这个算出来答案是0不知道怎么算的
例2:int X=2;x*=x+=++x这个答案是18,也不知道怎么算出来的?

int n=9;
n%=(n%=2)  n%=2   9除2余1, n=1
n%=1    1%1=0
n=0      

---
int X=2;
x *= (x += (++x));  x=2
x *= (x += (3)); x=3
x *= (6);  x=6
6*6=36

1.n%=n%=2,从右到左依次计算,等价于
n%=2;
n%=n;
那么不管前面n是多少,n对自己取余结果肯定是0呀
2.x*=x+=++x,一样,
++x;//3
x+=x;//6
x*=x;//36
我用代码执行出来确定结果是36,为什么会算出18来,那就是算错了呗

我试了一下,你说的不对
第一个答案是:0;
第二个答案是:36;
看图:

img

img

我认为的计算方法也非常的简单:
针对“n%=n%=2”,不要想太复杂,这就是一个z=x+y的问题,从左到右解题:

  1. 首先“%=”运算符和“=”运算符有相同的运算优先级
  2. 遇到“=”要先算等号右侧的算式,这里也就是 n%=2
  3. n初始值为9,经过n%=2运算后,也就是9除以2取余数,也就是1
  4. 此时算式就简化为了n%=1,此时,n=1,除以1取余数后就是0

针对“x*=x+=++x”也是一样的:

  1. 先算*=右侧的内容,也就是 x += ++x
  2. +=和=一样,也需要先算右侧的内容,也就是++x
  3. x初始值为2,++x运算后就是3
  4. 此时算式就变成了x *= x += 3
  5. 先计算*=右侧内容,也就是x += 3,此时x等于3,x+=3等价于 x = x+3,其中x=3
  6. 此时x的值就是6,算式也变成了 x *= 6,即 x = x * 6,此时x = 6
  7. 结果也就是6*6=36