語法書 / AA 競程語法書 上冊 / 第三單元 / 邏輯運算子與真值表

3.3 邏輯運算子與真值表

有時候我們需要同時檢查多個條件,例如「分數 >= 90 沒有曠課」才能拿 A 級。邏輯運算子讓我們可以組合多個布林值。

三個主要的邏輯運算子

  1. NOT(非):!

    • 反轉一個布林值
    • !true = false
    • !false = true
  2. AND(與):&&

    • 只有兩個條件都為 true,結果才是 true
    • true && true = true
    • true && false = false
    • false && false = false
  3. OR(或):||

    • 只要有一個條件為 true,結果就是 true
    • true || false = true
    • false || false = false
    • true || true = true

真值表

真值表(truth table)是一張把某個邏輯運算「所有可能的輸入組合」以及「對應結果」全部列出來的表格。因為布林值只有 truefalse 兩種,只要把每個輸入的兩種可能都排列組合,就能窮舉出所有情況、一眼看清運算子的行為。

例如 A && BAB 兩個輸入,各有兩種可能,總共就是 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

動手試試看

寫一個程式,輸入兩個整數 ab,輸出:

  • 它們是否同時大於 0?
  • 它們中至少有一個大於 10?
  • 它們是否不相等?