我对 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 运算符优先级表