int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");
在上面的代碼段的,根據我,第一將導致真正的和!true
是假必須導致打印Bye
但我得到Welcome
作爲輸出。執行條件運算
任何人都可以解釋這一個嗎?
int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");
在上面的代碼段的,根據我,第一將導致真正的和!true
是假必須導致打印Bye
但我得到Welcome
作爲輸出。執行條件運算
任何人都可以解釋這一個嗎?
!
首先執行,因爲一元運算符!
的優先級高於!=
。
!4
變成0
然後0 != 1
變成true
。因此,輸出爲Welcome
。
!j!=1
是(!j)!=1
而不是!(j!=1)
。
這是因爲!
(NOT)具有較高的比operator precedence所以!=
...
j = 4; // 4
!j // 0
在你的條件,所以 「歡迎」 印0 != 1
將是真實的。
對於你想要的結果,你的病情必須是!(j!=1)
。
邏輯NOT操作!
具有更高的優先級比不等於操作!=
所以你的情況相當於((!j) != 1)
見https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
一元運算符'!'比'具有更高的優先權!'='。
閱讀 - https://www.tutorialspoint.com/cprogramming/c_operators_precedence.htm。
查看[運算符優先級表](http://en.cppreference.com/w/c/language/operator_precedence)並自己回答。 –
顯然它應該寫成'j ?? !! j!= 1? printf(「Welcome」):printf(「Bye」);'而是爲了清晰。 – Lundin
如果您將其中一個答案標記爲答案,那該多好啊... – Charles