我对 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/