我目前正在學習布爾資料型別,我想知道 if-else 陳述句中的條件是否完整......
#include <stdio.h>
#include <stdbool.h>
int main() {
bool a = false, b = false, c = false , d = false;
if ((a&&b)||(!c&&d)) {
if(((a||!b)&&c)||(b&&!a)) {
printf("1");
} else if ((a||(d&&b))&& !b) {
printf("2");
} else {
printf("3");
}
} else {
if(!(d&&c)&&(!a)) {
printf("4");
} else {
printf("5");
}
}
return 0;
}
if-else 陳述句中的條件不應該進行比較嗎?例如 (a&&b) ==true || (!c&&d) ==true。按原樣運行程式會輸出“4”,我對為什么有點困惑。謝謝
uj5u.com熱心網友回復:
為了理解代碼如何執行并給出最終結果,關鍵是要理解運算子的優先級。
在這三個邏輯運算子,即邏輯不 !,邏輯與 &&和邏輯或 ||,邏輯不 !具有最高的優先級,在邏輯和 &&再談到邏輯或 ||。
所述邏輯不 !具有比更高的優先級的邏輯和 &&以及邏輯或 ||,所以a&&b和!c&&d兩個評估到false。
因為(a&&b)||(!c&&d)計算結果為 false,所以外部if主體不執行。
現在,它進入了外部的 else 部分。
d&&c計算結果為假,因為d和c都是假的。結果,!(d&&c)評估為真。當然也不是!a評估為真。
最后,!(d&&c)&&(!a)是真的。所以printf("4");執行并輸出一個4
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/409572.html
標籤:
上一篇:使用nginx將gRPC流量從HTTPS重定向到HTTP
下一篇:谷歌表,如果功能與復選框
