C++逻辑运算

一、C++ 逻辑运算符的核心概念

逻辑运算的作用是对布尔值(true/false) 进行判断,最终返回一个布尔结果。C++ 中规定:0 代表假(false),非 0 值 都代表真(true)。

C++ 提供了 3 个核心逻辑运算符:

运算符 名称 作用 示例 结果(a = 真,b = 假)
&& 逻辑与 两边都为真,结果才为真 a && b false
` ` 逻辑或 只要一边为真,结果就为真 `a b` true
! 逻辑非 取反(真变假,假变真) !a false

二、关键特性:短路求值(重要)

C++ 的逻辑与 (&&) 和逻辑或 (||) 会遵循短路求值规则,这是优化也是常见考点:

  1. 逻辑与 (&&) :如果左边表达式为假,直接返回假,不会执行右边表达式;
  2. 逻辑或 (||) :如果左边表达式为真,直接返回真,不会执行右边表达式。

三、代码示例(直观理解)

下面的代码覆盖了基础用法和短路求值的场景,可直接编译运行:

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

四、逻辑运算的常见应用场景

  1. 条件判断(if/while/for) :

    cpp

    运行

    复制代码
    // 判断年龄是否在18-60之间
    int age = 25;
    if (age >= 18 && age <= 60) {
        cout << "成年且未退休" << endl;
    }
  2. 排除非法情况 :

    cpp

    运行

    复制代码
    // 判断输入是否为非负数
    int score;
    if (!(score < 0)) {
        cout << "分数合法" << endl;
    }

五、常见易错点

  1. 混淆逻辑运算符和位运算符 :
    • 逻辑与是 &&,位与是 &;逻辑或是 ||,位或是 |。
    • 错误示例:if (a & b)(本意是逻辑与,却用了位与),当 a/b 非布尔值时会出错。
  2. 忽略短路求值的副作用 :
    • 不要在逻辑运算的右侧写 "依赖执行的代码"(如x++、函数调用),否则可能因短路导致代码不执行。
  3. 非布尔值的逻辑判断 :
    • 记住 "非 0 即真":比如 -5、3.14 都视为 true,只有0、0.0 视为 false。

总结

  1. C++ 逻辑运算有 3 个核心运算符:&&(与)、||(或)、!(非),运算结果为布尔值(0/false 或 1/true);
  2. && 和 || 遵循短路求值规则,可优化性能,但需注意右侧代码可能不执行;
  3. 逻辑运算常用于条件判断,核心是 "0 为假,非 0 为真",需区分逻辑运算符和位运算符。
相关推荐
爱写代码的小朋友9 分钟前
Windows 下 MSYS2 + MinGW64 安装与使用 OpenCV 全指南(含踩坑记录)
c++·人工智能·windows·opencv
重生之小比特19 分钟前
【C++进阶】封装红⿊树实现mymap和myset
开发语言·c++
边境悍匪22 分钟前
蜗牛学苑 Java 智能体学习 Day49|贯穿项目 5 订单下单业务 思维导图复盘
java·开发语言·spring boot·学习·阿里云
“AI国潮设计-小江”26 分钟前
【AIGC实战】Python+SDXL打造潮汕国潮IP:英歌舞麻将的自动化生成与商用思路
开发语言·人工智能·python·prompt·aigc
Omics Pro29 分钟前
空间组学!医学代谢显微工具
数据库·人工智能·算法·机器学习·自然语言处理
YYYing.30 分钟前
【设计模式系列 (四) 】建造者模式
c++·后端·设计模式·建造者模式·c/c++
羑悻的小杀马特32 分钟前
Docker高阶实战:从Redis集群到C++微服务,全面解析镜像优化与生产环境部署+镜像制作常见问题详解
c++·redis·docker·镜像制作·dockefile
Coder-magician34 分钟前
《代码随想录》刷题打卡day44:图论-part02
算法·深度优先·图论
别动我齐刘海34 分钟前
ROS2 Jazzy + C++ 时间系统——Time / Clock / Duration
linux·c++·人工智能·学习·机器学习·机器人·自动驾驶
克里斯蒂亚诺更新35 分钟前
理解机器学习的各种算法
人工智能·算法·机器学习