2014-03-06 121 views
0

我對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

您使用的是哪張圖表?那是不正確的'++'比二進制'&'具有更高的優先級,參見[這裏](http://www.swansontec.com/sopc.html)。 –

回答

0

對於前綴/後綴:

++一個 - >(檢索+增量),那麼使用的值。

一個++ - >(檢索),使用值,(增量)

優先順序:這是這樣的:

((++ A)& 0×01),兩個(&和++)在不同的表達。

希望它在一定程度上有助於理解。