2016-09-28 97 views
0
int j=4; 
(!j!=1)?printf("Welcome"):printf("Bye"); 

在上面的代碼段的,根據我,第一將導致真正的和!true是假必須導致打印Bye但我得到Welcome作爲輸出。執行條件運算

任何人都可以解釋這一個嗎?

+0

查看[運算符優先級表](http://en.cppreference.com/w/c/language/operator_precedence)並自己回答。 –

+1

顯然它應該寫成'j ?? !! j!= 1? printf(「Welcome」):printf(「Bye」);'而是爲了清晰。 – Lundin

+0

如果您將其中一個答案標記爲答案,那該多好啊... – Charles

回答

2

!首先執行,因爲一元運算符!的優先級高於!=

!4變成0然後0 != 1變成true。因此,輸出爲Welcome

2

!j!=1(!j)!=1而不是!(j!=1)

2

這是因爲!(NOT)具有較高的比operator precedence所以!= ...

j = 4; // 4 
!j // 0 

在你的條件,所以 「歡迎」 印0 != 1將是真實的。

對於你想要的結果,你的病情必須是!(j!=1)