2013-06-26 60 views
-6

Q1:輸出?這三個相似但不相同的問題。怎麼樣?

int main() { 
    int i=-3, j=2, k=0, m; 
    m = ++i && ++j || ++k; 
    printf ("%d %d %d %d", i,j,k,m); 
    return 0; 
} 

Q2:輸出?

int main() { 
    int i=-3, j=2, k=0, m; 
    m = ++i || ++j && ++k; 
    printf ("%d %d %d %d", i,j,k,m); 
    return 0; 
} 

Q3:輸出?

int main() { 
    int i=-3, j=2, k=0, m; 
    m = ++i && ++j && ++k; 
    printf ("%d %d %d %d", i,j,k,m); 
    return 0; 
} 

請解釋這個操作是如何工作的?

+5

但是,讓我們知道您怎麼看..我們再討論這個問題.. – Maroun

+0

源代碼有什麼區別?你可以根據它做出哪些假設? – lucasg

+0

[此鏈接](http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B)可以解釋你的一切。 –

回答

2

布爾操作是從左到右處理的(沒有括號...)。只要結果得到解決,它就會停止評估其餘條件。這意味着:

false && (AND) -> is always false, no matter what 
true || (OR) -> is always true, no matter what 

first case stops @ || (because true && true || doesn't matter) 
second case stops @ || (because true || doesn't matter && how much && operations ...) 
third case stops @ end (because true && true && -> still have to check because if there would be false, the whole expression would be false) 

因爲它停止在特定點++運算符不執行其餘的東西。

這也是爲什麼你要小心做的東西像增量,DECR,或東西的條件的原因...

+0

+1這應該解釋得很好。 – amulous

相關問題