一、C++ 逻辑运算符的核心概念
逻辑运算的作用是对布尔值(true/false) 进行判断,最终返回一个布尔结果。C++ 中规定:0 代表假(false),非 0 值 都代表真(true)。
C++ 提供了 3 个核心逻辑运算符:
| 运算符 | 名称 | 作用 | 示例 | 结果(a = 真,b = 假) | ||||
|---|---|---|---|---|---|---|---|---|
&& |
逻辑与 | 两边都为真,结果才为真 | a && b |
false | ||||
| ` | ` | 逻辑或 | 只要一边为真,结果就为真 | `a | b` | true | ||
! |
逻辑非 | 取反(真变假,假变真) | !a |
false |
二、关键特性:短路求值(重要)
C++ 的逻辑与 (&&) 和逻辑或 (||) 会遵循短路求值规则,这是优化也是常见考点:
- 逻辑与 (
&&) :如果左边表达式为假,直接返回假,不会执行右边表达式; - 逻辑或 (
||) :如果左边表达式为真,直接返回真,不会执行右边表达式。
三、代码示例(直观理解)
下面的代码覆盖了基础用法和短路求值的场景,可直接编译运行:
cpp
运行
#include <iostream>
using namespace std;
int main() {
// 1. 基础逻辑运算
bool a = true; // 真
bool b = false; // 假
int num1 = 5; // 非0,视为真
int num2 = 0; // 0,视为假
// 逻辑与 &&
cout << "a && b = " << boolalpha << (a && b) << endl; // false
cout << "num1 && num2 = " << (num1 && num2) << endl; // 0(false)
cout << "num1 && 10 = " << (num1 && 10) << endl; // 1(true)
// 逻辑或 ||
cout << "a || b = " << (a || b) << endl; // true
cout << "num2 || 0 = " << (num2 || 0) << endl; // 0(false)
cout << "num2 || num1 = " << (num2 || num1) << endl; // 1(true)
// 逻辑非 !
cout << "!a = " << !a << endl; // false
cout << "!num2 = " << !num2 << endl; // 1(true)
// 2. 短路求值示例(重点)
int x = 1;
// 逻辑与:左边false,右边x++不会执行
if (0 && (x++)) {
cout << "执行了" << endl;
}
cout << "x = " << x << endl; // x仍为1(未执行x++)
x = 1;
// 逻辑或:左边true,右边x++不会执行
if (1 || (x++)) {
cout << "执行了" << endl;
}
cout << "x = " << x << endl; // x仍为1(未执行x++)
return 0;
}
代码输出结果:
plaintext
a && b = false
num1 && num2 = 0
num1 && 10 = 1
a || b = true
num2 || 0 = 0
num2 || num1 = 1
!a = false
!num2 = 1
x = 1
执行了
x = 1
四、逻辑运算的常见应用场景
-
条件判断(if/while/for) :
cpp
运行
// 判断年龄是否在18-60之间 int age = 25; if (age >= 18 && age <= 60) { cout << "成年且未退休" << endl; } -
排除非法情况 :
cpp
运行
// 判断输入是否为非负数 int score; if (!(score < 0)) { cout << "分数合法" << endl; }
五、常见易错点
- 混淆逻辑运算符和位运算符 :
- 逻辑与是
&&,位与是&;逻辑或是||,位或是|。 - 错误示例:
if (a & b)(本意是逻辑与,却用了位与),当 a/b 非布尔值时会出错。
- 逻辑与是
- 忽略短路求值的副作用 :
- 不要在逻辑运算的右侧写 "依赖执行的代码"(如
x++、函数调用),否则可能因短路导致代码不执行。
- 不要在逻辑运算的右侧写 "依赖执行的代码"(如
- 非布尔值的逻辑判断 :
- 记住 "非 0 即真":比如
-5、3.14都视为 true,只有0、0.0视为 false。
- 记住 "非 0 即真":比如
总结
- C++ 逻辑运算有 3 个核心运算符:
&&(与)、||(或)、!(非),运算结果为布尔值(0/false 或 1/true); &&和||遵循短路求值规则,可优化性能,但需注意右侧代码可能不执行;- 逻辑运算常用于条件判断,核心是 "0 为假,非 0 为真",需区分逻辑运算符和位运算符。