C操作顺序?

Cat*_*ita 1 c operators

有人可以解释一下为什么以下代码的结果是9?我真的很困惑..

#include <stdio.h>

int main (void)
{ 
   int a = 3, rez;
   rez = a-- + (-3) * (-2);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ode 5

表达方式

rez = a-- + (-3) * (-2)
Run Code Online (Sandbox Code Playgroud)

解析

res = ((a--) + ((-3) * (-2)))
Run Code Online (Sandbox Code Playgroud)

并被评估为"将结果a--添加到结果中(-3) * (-2),并将最终结果分配给res".

Postfix的--优先级高于一元-,后者的优先级高于二进制*,后者的优先级高于二进制+,后者的优先级高于二进制=.

请注意,评估的优先顺序顺序并不相同 - 它不能保证a--在之前评估(-3) * (-2),或者-3之前评估-2; 所有有保证的是,结果(-3) * (-2),才可以被添加到已知结果a--.

Futhermore的副作用a--没有评估后立刻应用.这意味着以下是完全有效的操作顺序:

t1 = a
t2 = -2
t2 = t2 * -3
res = t1 + t2
a = a - 1
Run Code Online (Sandbox Code Playgroud)