后缀前缀++和二元和运算符的优先级

she*_*ngy 0 c operator-precedence prefix-operator postfix-operator

我对C中的postfix和前缀运算符优先级感到困惑,任何帮助和提示都会有所帮助.

我会在这里粘贴我的测试代码:

#include <stdio.h>

int a = 0;

int main(int argc, char *argv[])
{
   if (++a & 0x01) // prefix version
   // if (a++ & 0x01) // postfix version
   {
      printf("++ first\n");
   }
   else
   {
      printf("& first\n");
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我现在可以理解,在postfix版本中,虽然postfix ++有一个更大的优先级,但是a++会返回0到这里&,0x01并且会a在此表达式后增加值.

但我无法理解的是为什么在前缀版本中,为什么++a首先进行评估?运算符优先级表指示prefix ++&具有相同的优先级,此外,它们的关联性为right-to-left.这种方法&不应该先评估吗?

编辑: 我正在使用的图表:C运算符优先表

Mic*_*ith 7

再次检查您的优先级表.我相信你可能会对一元地址运算符&和二进制按位运算符感到困惑&.

请参阅:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

通过这种解释,您a在应用按位和之前递增.