后缀前缀++和二进制&的优先顺序运营商

时间:2014-03-06 03:20:43

标签: c operator-precedence postfix-operator prefix-operator

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

我会在此处粘贴测试代码:

#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;
}

我现在可以理解,在后缀版本中,虽然postfix ++具有更高的优先级,但a++会在此0返回&0x01会在此表达式后增加a的值。

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

修改 我正在使用的图表:C Operator Precedence Table

2 个答案:

答案 0 :(得分:7)

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

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

通过这种解释,您在应用按位和。

之前递增a

答案 1 :(得分:0)

对于前缀/后缀:

++ a - &gt; (检索+增量),然后使用该值。

a ++ - &gt; (检索),使用值,(增量)

优先顺序:这就是这样:

((++ a)&amp; 0x01),两者(&amp;和++)都有不同的表达方式。

希望在某种程度上有助于理解。

相关问题