Boolean values store true or false and help choose branches.

logical and The `&&` operator is true only when both sides are true.

Boolean Logic

example
bool_logic.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>

int main() {
    int age = 20;
    bool hasPass = true;
    bool canEnter = age >= 18 && hasPass;
    std::string result = "";

    if (canEnter) {
        result = "enter";
    } else {
        result = "wait";
    }

    std::cout << "age=" << age << std::endl;
    std::cout << "hasPass=" << hasPass << std::endl;
    std::cout << "result=" << result << std::endl;
    return 0;
}
#include <iostream>
#include <string>

int main() {
    int age = 15;
    bool hasPass = true;
    bool canEnter = age >= 18 && hasPass;
    std::string result = "";

    if (canEnter) {
        result = "enter";
    } else {
        result = "wait";
    }

    std::cout << "age=" << age << std::endl;
    std::cout << "hasPass=" << hasPass << std::endl;
    std::cout << "result=" << result << std::endl;
    return 0;
}
#include <iostream>
#include <string>

int main() {
    int age = 70;
    bool hasPass = true;
    bool canEnter = age >= 18 && hasPass;
    std::string result = "";

    if (canEnter) {
        result = "enter";
    } else {
        result = "wait";
    }

    std::cout << "age=" << age << std::endl;
    std::cout << "hasPass=" << hasPass << std::endl;
    std::cout << "result=" << result << std::endl;
    return 0;
}
#include <iostream>
#include <string>

int main() {
    int age = 20;
    bool hasPass = false;
    bool canEnter = age >= 18 && hasPass;
    std::string result = "";

    if (canEnter) {
        result = "enter";
    } else {
        result = "wait";
    }

    std::cout << "age=" << age << std::endl;
    std::cout << "hasPass=" << hasPass << std::endl;
    std::cout << "result=" << result << std::endl;
    return 0;
}
  1. age ← 20, hasPass ← 1, canEnter ← 1, result ← (empty)

    4int main() {5    int age→ 20 = 20; //@age=15, 706    bool hasPass→ 1 = true; //@hasPass=false7    bool canEnter→ 1 = age20 >= 18 && hasPass1;8    std::string result→ (empty) = "";
  2. result ← enter

    10if (canEnter1) {11    result→ enter = "enter";12} else {
  3. std::cout << "age=" << age << std::endl;

    16    std::cout << "age=" << age20 << std::endl;17    std::cout << "hasPass=" << hasPass1 << std::endl;18    std::cout << "result=" << resultenter << std::endl;19    return 0;20}
    outputage=20
    hasPass=1
    result=enter
  1. age ← 15, hasPass ← 1, canEnter ← 0, result ← (empty)

    4int main() {5    int age→ 15 = 15;6    bool hasPass→ 1 = true;7    bool canEnter→ 0 = age15 >= 18 && hasPass1;8    std::string result→ (empty) = "";
  2. result ← wait

    11    result = "enter";12} else {13    result→ wait = "wait";14}
  3. std::cout << "age=" << age << std::endl;

    16    std::cout << "age=" << age15 << std::endl;17    std::cout << "hasPass=" << hasPass1 << std::endl;18    std::cout << "result=" << resultwait << std::endl;19    return 0;20}
    outputage=15
    hasPass=1
    result=wait
  1. age ← 70, hasPass ← 1, canEnter ← 1, result ← (empty)

    4int main() {5    int age→ 70 = 70;6    bool hasPass→ 1 = true;7    bool canEnter→ 1 = age70 >= 18 && hasPass1;8    std::string result→ (empty) = "";
  2. result ← enter

    10if (canEnter1) {11    result→ enter = "enter";12} else {
  3. std::cout << "age=" << age << std::endl;

    16    std::cout << "age=" << age70 << std::endl;17    std::cout << "hasPass=" << hasPass1 << std::endl;18    std::cout << "result=" << resultenter << std::endl;19    return 0;20}
    outputage=70
    hasPass=1
    result=enter
  1. age ← 20, hasPass ← 0, canEnter ← 0, result ← (empty)

    4int main() {5    int age→ 20 = 20;6    bool hasPass→ 0 = false;7    bool canEnter→ 0 = age20 >= 18 && hasPass0;8    std::string result→ (empty) = "";
  2. result ← wait

    11    result = "enter";12} else {13    result→ wait = "wait";14}
  3. std::cout << "age=" << age << std::endl;

    16    std::cout << "age=" << age20 << std::endl;17    std::cout << "hasPass=" << hasPass0 << std::endl;18    std::cout << "result=" << resultwait << std::endl;19    return 0;20}
    outputage=20
    hasPass=0
    result=wait

Follow the Decision

  1. age starts at 20.
  2. hasPass is true, and C++ prints it as 1.
  3. The entry check succeeds for age 20 with a pass.
  4. result becomes enter.
  5. The program prints age=20, hasPass=1, and result=enter. | age | hasPass output | result | | --- | --- | --- | | 15 | 1 | wait | | 20 | 1 | enter | | 20 | 0 | wait | | 70 | 1 | enter |

Exercise: bool_logic.cpp

Reproduce result=enter, then use the pinned age and hasPass variants to predict which rows print wait.