3.3 邏輯運算子與真值表
有時候我們需要同時檢查多個條件,例如「分數 >= 90 且 沒有曠課」才能拿 A 級。邏輯運算子讓我們可以組合多個布林值。
三個主要的邏輯運算子
NOT(非):
!- 反轉一個布林值
!true=false!false=true
AND(與):
&&- 只有兩個條件都為 true,結果才是 true
true && true=truetrue && false=falsefalse && false=false
OR(或):
||- 只要有一個條件為 true,結果就是 true
true || false=truefalse || false=falsetrue || true=true
¶真值表
真值表(truth table)是一張把某個邏輯運算「所有可能的輸入組合」以及「對應結果」全部列出來的表格。因為布林值只有 true 和 false 兩種,只要把每個輸入的兩種可能都排列組合,就能窮舉出所有情況、一眼看清運算子的行為。
例如 A && B 有 A、B 兩個輸入,各有兩種可能,總共就是 2 \times 2 = 4 種組合。下表把 !、&&、|| 的結果都整理在一起(其中 T = true,F = false):
| A | B | !A | A && B | A || B |
|---|---|---|---|---|
| T | T | F | T | T |
| T | F | F | F | T |
| F | T | T | F | T |
| F | F | T | F | F |
¶範例程式碼
#include <iostream>
using namespace std;
int main() {
int score = 85;
bool attended = true;
cout << boolalpha;
// 使用 &&(同時滿足兩個條件)
bool can_get_A = (score >= 90) && (attended);
cout << "Can get A? " << can_get_A << endl; // false
// 使用 ||(滿足其中一個條件)
bool is_special = (score >= 95) || (attended && score >= 80);
cout << "Meets special? " << is_special << endl; // true
// 使用 !(反轉)
bool not_attended = !attended;
cout << "Absent? " << not_attended << endl; // false
return 0;
}
執行結果
Can get A? false
Meets special? true
Absent? false
¶動手試試看
寫一個程式,輸入兩個整數 a 和 b,輸出:
- 它們是否同時大於 0?
- 它們中至少有一個大於 10?
- 它們是否不相等?