2.1 关系与逻辑运算符
程序不只是从上到下顺序执行语句。它们经常需要检查某个条件是否成立,然后决定下一步做什么。在 C++ 中,条件的结果通常是 bool:false 表示假,true 表示真。
关系运算符
关系运算符用来比较两个值。结果是 true 或 false,而不是另一个普通数字。
C++ 常见关系运算符包括:
<:小于>:大于<=:小于等于>=:大于等于==:等于!=:不等于
注意:一个等号 = 表示赋值,两个等号 == 才表示比较是否相等。
cpp
int age = 17;
std::cout << (age < 18) << std::endl; // 1
std::cout << (age == 18) << std::endl; // 0
std::cout << (age != 18) << std::endl; // 1默认情况下,std::cout 会把 true 输出为 1,把 false 输出为 0。如果想输出单词 true 和 false,可以使用 std::boolalpha。
cpp
std::cout << std::boolalpha << (age < 18) << std::endl; // trueage = 17 是把 17 存入变量 age;age == 18 是判断 age 当前的值是否等于 18。
正在加载概念检查...
逻辑运算符
逻辑运算符用来组合多个条件。它们的结果仍然是 true 或 false。
&&:只有所有条件都为真,整体才为真。||:只要至少一个条件为真,整体就为真。!:把真变成假,把假变成真。
真值表
真值表会列出所有可能的输入组合,帮助你看清规则。
&& 只有左右两边都为真时才为真。
| A | B | A && B |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
|| 只要至少一边为真就为真。
| A | B | A `\ | \ | ` B |
|---|---|---|---|---|
| true | true | true | ||
| true | false | true | ||
| false | true | true | ||
| false | false | false |
! 作用在单个值上,会翻转结果。
| A | ! A |
|---|---|
| true | false |
| false | true |
cpp
int age = 20;
bool has_ticket = true;
std::cout << std::boolalpha;
std::cout << (age >= 18 && has_ticket) << std::endl; // true
std::cout << (age < 18 || has_ticket) << std::endl; // true
std::cout << (!has_ticket) << std::endl; // false把条件读成自然语言会很有帮助:age >= 18 && has_ticket 表示“年龄至少 18 岁,并且有票”。
正在加载交互实验...
正在加载概念检查...
组合条件
C++ 不支持数学意义上的连续比较。像 0 < age < 18 这样的表达式可能可以编译,但它并不表示“age 在 0 到 18 之间”,所以要写成两个条件并用 && 连接。
cpp
int age = 16;
std::cout << (0 < age && age < 18) << std::endl; // 1当条件变复杂时,可以先给每个小条件取名字,再把它们组合起来。
cpp
int score = 85;
int attendance = 92;
bool passed = score >= 60 && attendance >= 80;
bool excellent = score >= 90 || attendance >= 95;
std::cout << std::boolalpha;
std::cout << passed << std::endl; // true
std::cout << excellent << std::endl; // false不要急着把所有条件都压进一行。给小条件命名,往往会让程序更容易阅读和调试。
正在加载概念检查...