我对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
答案 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;和++)都有不同的表达方式。
希望在某种程度上有助于理解。