C操作顺序?

时间:2017-01-17 18:49:39

标签: c operators

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

#include <stdio.h>

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

   return 0;
}

1 个答案:

答案 0 :(得分:5)

表达式

rez = a-- + (-3) * (-2)

解析

res = ((a--) + ((-3) * (-2)))

评估为&#34; a--的结果已添加到(-3) * (-2)的结果中,最终结果已分配给res &#34;

Postfix --的优先级高于一元-,后者的优先级高于二进制*,后者的优先级高于二进制+,后者的优先级高于=。 {1}}。

请注意,优先级评估顺序不是一回事 - 它不能保证在a--之前评估(-3) * (-2)-3之前评估-2;所有这一切都得到保证,(-3) * (-2)结果在被添加到a--结果之前就已知。

此外,a--副作用不必在评估后立即应用。这意味着以下是完全有效的操作顺序:

t1 = a
t2 = -2
t2 = t2 * -3
res = t1 + t2
a = a - 1