C 操作顺序?

标签 c operators

谁能解释一下为什么下面代码的结果是 9?我真的很困惑..

#include <stdio.h>

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

   return 0;
}

最佳答案

表达式

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

解析

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

并且被评估为“a--的结果被添加到(-3) * (-2)的结果中, 最终结果赋值给res”。

后缀 -- 的优先级高于一元 -,后者的优先级高于二进制 *,后者的优先级高于二进制 >+,其优先级高于=

请注意,优先级求值顺序 不是一回事 - 不能保证 a-- 之前求值(-3) * (-2),或者说 -3-2 之前求值;所保证的是 (-3) * (-2)结果 在添加到 结果 之前是已知的 a--

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

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

关于C 操作顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41704741/

相关文章:

c - "!"中的这段代码中 "Point in Polygon Test"的用途是什么?

c - 两个无符号整数相减得到结果绝对值

c - 调试器跳过整个 if 语句

c - 如何退出子进程 - _exit() 与 exit

php - 只是关于代码格式

C++,错误 : "no operator " == "matches these operands ", ostream/istream

c - 返回值时赋值

javascript - AND (&&) 优先于 OR (||) 的表达式示例?

javascript - 为什么这些 JavaScript 代码片段虽然都遇到了错误,但表现却不同?

performance - 重载运算符的表达式性能?