0

我对 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 版本中,虽然postfix ++具有更高的优先级,a++但会回到0这里&0x01会增加a' 的值。

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

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

4

2 回答 2

7

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

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

a使用这种解释,您可以在应用按位与之前递增。

于 2014-03-06T03:25:17.913 回答
0

对于前缀/后缀:

++a -> (retrieve + increment),然后使用该值。

a++ -> (retrieve), 使用值, (increment)

优先级: 这样:

((++a) & 0x01) ,( & 和 ++ )都在不同的表达式中。

希望对理解有所帮助。

于 2014-03-06T03:28:35.437 回答