c - 后缀 prefix++ 和二进制 & 运算符的优先级

标签 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版本中,虽然postfix++有更高的优先级,但是a++会在这里返回0&0x01 并将在此表达式后增加 a 的值。

但是我无法理解的是,为什么在前缀版本中,为什么首先评估++a?运算符优先级表表明prefix++&具有相同的优先级,而且它们的结合性是从右到左。这是否意味着应该首先评估 &

编辑: 我正在使用的图表:C Operator Precedence Table

最佳答案

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

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

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

关于c - 后缀 prefix++ 和二进制 & 运算符的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214167/

相关文章:

c - 即使满足条件,C 中的“if”语句也不会执行

c - C中的内存溢出混淆

c++ - 操作数的评估顺序

c - 查找字符串结尾 : *s++ VS *s then s++

c++ - 取消引用和后缀++优先级

c++ - 如何正确重载后缀增量运算符?

java - 我必须在 Eclipse 中使用 JNI 从我的 C 程序访问 java 程序中声明的变量

C指针上的指针: unused variable

java - 需要帮助理解 if 语句中的以下 boolean 表达式

c++ - 重载逗号运算符*真的*会影响其操作数的评估顺序吗?