2011-09-09 167 views
3

可能重複:
why "++x || ++y && ++z" calculate "++x" firstly ? however,Operator "&&" is higher than "||"運算符優先級

下面的程序似乎並不如預期的工作。 '& &'比'||'具有更高的優先權,所以實際的輸出是令人困惑的。任何人都可以解釋o/p嗎?

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int x; 
    int y; 
    int z; 

    x = y = z = 1; 

    x++ || ++y && z++; 

    printf("%d %d %d\n", x, y, z); 

    return 0; 
} 

實際輸出爲:2 1 1

TIA。

+0

另一個http://stackoverflow.com/questions/7212482/problem-with-operator-precedence – AnT

回答

5

評價的優先順序和順序有沒有任何關係。具有較高優先級比||

&&只是意味着表達被解釋爲

x++ || (++y && z++); 

因此,||左手操作數被第一評價(因爲有一個序列點後它需要) ,並且由於它評估的結果不是零,因此從不評估右側操作數(++y && z++)

1

運算符優先級規則意味着,如果它寫的表達式處理:

x++ || (++y && z++); 

由於x++爲真,則||表達的RHS不計算在所有 - 因此你看到的結果。

2

混亂的行被解析,好像它是:

x++ || (++y && z++); 

那麼這是評估左到右。由於||是一個短路評估器,一旦評估了左側,它就知道整個表達式將評估爲真值,因此它會停止。因此,x會增加,並且不會觸及yz