[英]Precedence of postfix prefix ++ and binary & operators
我對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運算符優先級表
再次檢查優先級表。 我相信你可能會得到混淆的一元地址運算符&
和二元按位與運算符&
。
請參閱: http : //en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
通過這種解釋,您a
在應用按位與之前將a
遞增。
對於前綴/后綴:
++ a->(檢索+增量),然后使用該值。
a ++->(檢索),使用值(遞增)
優先順序:通過這種方式:
((++ a)&0x01),(&和++)都使用不同的表達式。
希望它在某種程度上有助於理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.