当前位置: 首页 > article >正文

C++零基础到工程实战(3.1):if语句、bool类型、算数逻辑比较运算符深入解析

目录一、本节学习内容概要图二、前言三、if语句与逻辑判断3.1 基础语法1if 条件语句2else if 与 else3.2 常见错误1多余分号导致逻辑块独立2判断时误写赋值四、bool类型详解4.1 bool类型基础4.2 bool 与算术运算符4.3 逻辑运算符与短路求值五、位运算与 bitset 输出5.1 基本概念六、bool类型与if语句组合七、比较运算符与bool结合八、本章节代码提供九、重难点总结一、本节学习内容概要图二、前言在 C 中逻辑判断是程序控制流程的核心部分。初学者在使用if语句时容易出现语法错误、逻辑判断混淆或对bool类型理解不够深入。本篇文章将结合示例代码与思维导图系统讲解if-else条件语句及常见错误bool类型本质及算术运算、逻辑运算的区别位运算与bitset输出短路求值与效率优化。通过这些内容你不仅能掌握基础用法还能理解背后的原理为后续 C 工程实战打下坚实基础。三、if语句与逻辑判断3.1 基础语法1if条件语句if (条件表达式) { // 条件为 true 时执行 }条件表达式会被转换为bool类型当条件为true时执行对应代码块如果代码块只有一行可以省略大括号{}。2else if与elseif (条件1) { // 条件1为真 } else if (条件2) { // 条件2为真 } else { // 前面条件都不满足 }else if只有在前一个条件不满足时才会判断else是兜底前面所有条件都不满足时执行。3.2 常见错误1多余分号导致逻辑块独立if (x 103); // 错误分号结束了if语句 { cout [103]; } 输出会无条件执行 [103]因为 {} 已经是独立代码块。2判断时误写赋值if (x 104) // 错误将104赋值给x cout [104];非零值在 C 中会被转换为true正确写法if (105 x) // 避免写成 x 105 { cout [105]; }嵌套层级过多嵌套尽量不超过三层便于维护和调试。四、bool类型详解4.1 bool类型基础bool类型只能存储两种值true或false在内存中实现通常是非零即真即任何非零值都被视作truesizeof(bool)的大小由实现定义但不等于1字节时仍可使用。示例bool f1{true}; cout f1 endl; // 输出 1cout会将true输出为1false输出为0。4.2 bool 与算术运算符算术运算符对 bool 类型也有效但容易混淆运算符含义按位与|按位或~按位非示例代码bool f1 true, f2 false; cout (f1 | f2) endl; // 输出 1 cout (f1 f2) endl; // 输出 0虽然可以使用|、但在逻辑判断中更推荐使用 逻辑运算符理由如下4.3 逻辑运算符与短路求值运算符说明短路求值或and逻辑与前面为 false则后面不求值|| 或 or逻辑或!或not逻辑非示例逻辑运算符 orint x1 10; if ((x1) or (x1 2)) { cout (x1) or (x1 2) endl; } cout x1 x1 endl; // 输出 x1 11or短路求值前面x1已满足true所以(x1 2)不会执行。对比算术运算符|x1 10; if ((x1) | (x1 2)) { cout (x1) | (x1 2) endl; } cout x1 x1 endl; // 输出 x1 13两个操作数都会执行效率低且可能产生副作用。结论逻辑运算符不仅语义清晰而且效率更高。五、位运算与 bitset 输出5.1 基本概念逐位非~每个位取反逐位与两个对应位都为1则为1否则为0逐位或|两个对应位至少有1则为1char a 0b10000001; char b 0b00000001; cout a: bitset8(a) endl; // 输出 10000001 cout ~a: bitset8(~a) endl; // 输出 01111110 cout a b: bitset8(a b) endl; // 输出 00000001 cout a | b: bitset8(a | b) endl; // 输出 10000001bitset8(a)将a转换为 8 位二进制形式输出可用于调试位运算结果。六、bool类型与if语句组合bool类型在条件判断中非常常用bool t1 true; bool f1 false; if (t1 !f1) { cout t1 is true and f1 is false endl; }可以直接将逻辑运算与if结合逻辑表达式可用括号组合优先级由运算符决定。七、比较运算符与bool结合运算符含义等于!不等于小于大于小于等于大于等于比较运算符返回的本质就是 bool 值可直接用于if条件判断。示例int x; cin x; if (x 100 x ! 102) { cout x 100 and x ! 102 endl; }八、本章节代码提供// testif.cpp ///////////////////////////////////////////////////////////////////////////// //// 第三章开始逻辑了-有了分歧怎么办 /// 课程地址 http://cpp.show /// 夏曹俊老师微信 cppxcj /// 抖音 xiacaojun ///////////////////////////////////////////////////////////////////////////// #include iostream #include bitset using namespace std; int main() { //算数运算符 // 二进制 只包含 0和1 //逐位非 ~ ~0 1 ~10 // ~101 010 //逐位与 // 11 1 01 0 000 //逐位或 | // 1|11 0|11 1|01 0|00 char a 0b10000001; //0b c14 char b 0b00000001; //用bitset输出二进制 //#include bitset cout a:\t bitset8(a) endl; //逐位非 cout ~a:\t bitset8(~a) endl; cout b:\t bitset8(b) endl; cout ~b:\t bitset8(~b) endl; //逐位与 cout ab:\t bitset8(a b) endl; //逐位或 cout a|b:\t bitset8(a | b) endl; bool f1{ false }; bool f2{ false }; bool t1{ true }; bool t2{ true }; if (t1)cout t1 is true endl; cout f1 f1 endl; cout t1 t1 endl; //算术运算非无法用在bool类型 // true 0000 0001 ~ 1111 1110 // false 0000 0000 ~ 1111 1111 cout f1|t1 (f1|t1) endl; if (f1 | t1) cout (f1|t1)true\n; cout f1|f2 (f1 | f2) endl; cout f1t2 (f1 t2) endl; cout t1t2 (t1 t2) endl; //逻辑运算符 代用运算符 // 逻辑非 ! not // 逻辑或 || or // 逻辑与 and // and or 和 | 的区别 //逻辑运算符 短路求值 //如果通过第一个操作数就能得到结果 // 这不求值第二个 if (f1 or t1) { cout f1 or t1 endl; } if (f1 and t1) { } else { cout f1 and t1 else endl; } if (not f1) { cout not f1 endl; } if (not (f1 and t1)) { cout not (f1 and t1) endl; } //验证短路求值 // int x1{ 0 }; x1 10; if ((x1) or (x1 2)) { cout (x1) or (x1 2) endl; } cout x1 x1 endl; x1 10; if ((x1) | (x1 2)) { cout (x1) | (x1 2) endl; } cout x1 x1 endl; //标准输出 cout cout 请输入一个整数; //标准输入 cin 控制台接收的输入内容 int x{ 0 }; cin x; //用户输入的值存入了x cout x x endl; //比较表达式 ! //if条件满足后 // 其他的条件判断都不会进入 if (x 100) { cout x 100 endl; //if嵌套代码块如果只有一行 // 可以省略{} //嵌套尽量不超过三层 if (x 101) cout x101 endl; if (x ! 102) cout [!102]; //容易出现的bug,多出的 if (x 103); { cout [103]; } //容易出现的错误 写成 //非0都转为true if (x 104) cout [104]; if (105 x) //避免错误的写法 { cout [105]; } } else if (x 200) //永远不会进入 { cout x 200 endl; } else if (x 50) { cout x 50 endl; } else { //前面所有条件都不满足 // 直接进入else 代码块 cout else x x endl; } }九、重难点总结if 条件注意不要多余分号赋值要用可将常量放左侧避免误写。逻辑运算符短路求值优于算术位运算符效率更高且安全。bitset 可用于输出任意整型或 bool 运算的二进制形式便于调试。bool 类型在 cout 输出时显示 0/1本质仍为 true/false。if、bool、比较运算、逻辑运算组合使用需关注括号优先级和短路效果。

相关文章:

C++零基础到工程实战(3.1):if语句、bool类型、算数逻辑比较运算符深入解析

目录 一、本节学习内容概要图 二、前言 三、if语句与逻辑判断 3.1 基础语法 (1)if 条件语句 (2)else if 与 else 3.2 常见错误 (1)多余分号导致逻辑块独立 (2)判断时误写赋…...

C++头文件详解:<iomanip> 头文件使用详解

目录 一、前言 二、浮点数精度控制 2.1 fixed 与 setprecision() (1)fixed 的作用 (2)setprecision(n) 的作用 (3)示例:RGB 转 YUV 计算 2.2 scientific 科学计数法 三、设置输出宽度与…...

CP880显示驱动库:车规级TFT-LCD底层控制与零拷贝实现

1. CP880显示驱动库深度解析:面向CARIAD车载信息娱乐系统的TFT-LCD底层控制方案1.1 库定位与工程背景CP880是专为大众集团CARIAD软件平台定制的嵌入式图形显示驱动库,核心目标是为车载信息娱乐系统(IVI)提供高可靠性、低延迟的TFT…...

OpenClaw+SecGPT-14B成本对比:自建模型比SaaS省下80%费用

OpenClawSecGPT-14B成本对比:自建模型比SaaS省下80%费用 1. 为什么我要做这个成本对比实验 去年我开始使用OpenClaw自动化处理日常安全扫描任务时,发现一个令人头疼的问题:每次调用商业安全API的费用高得惊人。作为一个独立安全研究员&…...

OpenClaw压力测试:百川2-13B-4bits连续处理1000个文件的稳定性

OpenClaw压力测试:百川2-13B-4bits连续处理1000个文件的稳定性 1. 测试背景与目标 去年冬天的一个深夜,我正被堆积如山的PDF合同审核工作折磨得焦头烂额。当时突发奇想:如果用AI自动处理这些文件会怎样?这个念头直接促成了本次压…...

JIT启用后CPU飙升200%?PHP 8.9生产环境避坑指南,含8类典型误配置清单

第一章:PHP 8.9 JIT 的核心机制与性能悖论PHP 8.9 并非官方发布的正式版本(截至 PHP 官方最新稳定版为 8.3),该标题中的 “8.9” 是一个假设性技术前瞻设定,用于探讨 JIT 编译器在 PHP 生态中持续演进所引发的底层机制…...

【单片机0.2】

文章目录六个9第一位和第六位亮六个灯亮轮播0-9中间两个灯亮轮播0-9亮灯123456小数点13.14.15六个9 #include<reg52.h> // 头文件// 定义锁存器控制引脚 sbit dulaP3^4; // 锁存器U2&#xff08;段选&#xff09; sbit welaP1^6; // 锁存器U2&#xff08;位选&#xff0…...

作业二6位数码管显示

文章目录1.效果图:显示6个91.代码2.效果图&#xff1a;第1、6位显示72.代码3.效果图&#xff1a;6位0到9轮流显示3.代码4.效果图&#xff1a;中间两位0到9轮流显示4.代码5.效果图&#xff08;显示1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff…...

Keep平台API开发实战指南:从设计理念到生产落地

Keep平台API开发实战指南&#xff1a;从设计理念到生产落地 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 一、API设计理念&#xff1a;构建灵活的告警管理生态 在现代运维体系…...

账号没有明显违规却突然受限很多时候问题藏在哪些地方

无声的雷区&#xff1a;当你的账号悄然“触线”在数字生活的日常中&#xff0c;或许你曾经历过这样的瞬间&#xff1a;登录熟悉的平台&#xff0c;却收到一条冰冷提示——“账号功能受限”。你反复检查&#xff0c;确信自己没有发布违规内容、没有恶意刷屏、没有触及那些明晃晃…...

AccelStepper:Arduino步进电机精准控制与多轴协同解决方案

AccelStepper&#xff1a;Arduino步进电机精准控制与多轴协同解决方案 【免费下载链接】AccelStepper Fork of AccelStepper 项目地址: https://gitcode.com/gh_mirrors/acc/AccelStepper 在自动化控制领域&#xff0c;步进电机的精准驱动是实现精密运动的核心。AccelSt…...

HarmonyOS-ArkTS-新手完整复现-含环境配置

HarmonyOS ArkTS 新手完整复现&#xff1a;从环境配置到网络列表 App&#xff08;超细步骤&#xff09; 欢迎访问开源鸿蒙 PC 开发者社区&#xff08;https://harmonypc.csdn.net/&#xff09;。 摘要 本文面向零基础/初学者&#xff0c;完整讲清&#xff1a; 如何在 Window…...

MDCL:不换设备,不降功率,电费减少三分之一——发射机技术内核(二)

上一篇讲了固态发射机的模块级效率已经到了90%——硬件层面的省电空间接近极限。但AM调制本身还藏着一个巨大的效率漏洞&#xff1a;载波。 载波的浪费 AM调制有一个教科书级别的效率缺陷&#xff1a;载波本身不携带任何信息。 在标准双边带AM中&#xff0c;所有音频信息都在…...

25套HTML数据可视化大屏模板|覆盖智慧交通、医疗、城市、政务等11大行业应用

温馨提示&#xff1a;文末有联系方式25套行业级HTML可视化大屏源码合集 本提供25套高还原度、响应式设计的HTML数据可视化大屏源码&#xff0c;全部基于纯前端技术&#xff08;HTML/CSS/JS&#xff09;构建&#xff0c;无需后端依赖&#xff0c;可快速部署至各类内网或公有云环…...

OpenClaw定时任务专家:Gemma-3-12b-it自动化日报生成系统

OpenClaw定时任务专家&#xff1a;Gemma-3-12b-it自动化日报生成系统 1. 为什么需要自动化日报系统 作为技术团队的负责人&#xff0c;我每天最头疼的就是收集各成员的日报。传统的做法是让每个人手动填写模板&#xff0c;但执行效果总是不尽如人意——有人忘记提交&#xff…...

阿姆智创15.6寸工业工控触摸一体机,赋能机器视觉与SMT产线场景,源头工厂ODM定制方案

在电子制造高速发展的今天&#xff0c;机器视觉检测与SMT贴片生产线已成为智能制造的重要载体&#xff0c;对工业控制终端的显示精度、运算性能、接口拓展及环境适应性提出了更高要求。阿姆智创15.6寸工业工控触摸一体机&#xff0c;以高清显示、工业级稳定性能、全场景接口配置…...

全球首发 | 「AI智能库」正式官宣,智库智能重新定义仓库!

智库智能 江苏智库智能科技有限公司创立于2017年&#xff0c;是全球托盘仓储机器人领航者&#xff0c;专注于托盘仓储机器人的研发设计和生产交付&#xff0c;拥有机器人本体、业务系统、核心算法、交付系统等全价值链研发能力。公司已推出多款托盘仓储机器人及智能仓储软件…...

2026届最火的六大AI学术平台实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当下&#xff0c;各种各样的AI生成内容检测工具越来越广泛地被使用&#xff0c;这给那些依靠…...

资源捕获与媒体解析:猫抓插件效率革命全指南

资源捕获与媒体解析&#xff1a;猫抓插件效率革命全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代&#xff0c;我们每天…...

Sketch Measure插件完全指南:如何用设计规范提升团队协作效率

Sketch Measure插件完全指南&#xff1a;如何用设计规范提升团队协作效率 【免费下载链接】sketch-measure Make it a fun to create spec for developers and teammates 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-measure Sketch Measure是一款专为设计师和…...

如何在openKylin 2.0 SP2中安装Qt(v0.2.2)(上)

作者&#xff1a;沈传越&#xff0c;赵文硕 明德融创工作室&#xff08;Minter Fusion Studio, MFS&#xff09; 出品 本文的所有步骤均经过测试复现 如何在openKylin 2.0 SP2中安装Qt&#xff08;v0.2.2&#xff09;&#xff08;下&#xff09; Qt是一款著名的桌面图形化系…...

空项目文档无法生成技术内容

项目标题“mecanum2017_2”未提供有效摘要、关键词及README内容&#xff0c;所有输入字段均为空或无效&#xff08;摘要仅为十六个日文平假名“おぼぼぼぼぼぼぼぼぼぼぼぼぼぼぼ”&#xff0c;无技术含义&#xff1b;关键词为空&#xff1b;README内容为空&#xff09;。 根据…...

Burpsuite之暴力破解+验证码识别 | 添柴不加火始

springboot自动配置 自动配置了大量组件&#xff0c;配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后&#xff0c;springboot会根据类路径上的jar包来自动配置bean&#xff08;比如&#xff1a;springboot发现类路径上的MyBatis相关类&#xff…...

BMS81M001超低功耗震动唤醒模块技术解析

1. BMS81M001 唤醒式震动检测模块深度技术解析1.1 模块定位与工程价值BMS81M001 是由 BEST MODULES CORP 推出的专用低功耗唤醒型震动检测模块&#xff0c;其核心设计目标是解决嵌入式系统中“持续监听机械扰动”带来的能耗瓶颈问题。在工业状态监测、智能穿戴设备、防盗报警系…...

Labelme(5.10.1)标签选择框跑出屏幕的修复

遇到的问题在屏幕边缘标注时&#xff0c;Labelme的标签选择对话框会一半显示在屏幕外&#xff0c;需要手动拖回来&#xff0c;影响效率&#xff0c;如下图所示&#xff1a;解决方法修改Python环境下的Lib\site-packages\labelme\widgets\label_dialog.py文件&#xff0c;路径示…...

C/C++核心语法与嵌入式开发实战解析

1. C/C核心语法深度解析与面试高频考点作为从事嵌入式开发十余年的老手&#xff0c;我见过太多候选人在C/C基础问题上折戟沉沙。本文将系统梳理那些面试官最爱问的核心语法点&#xff0c;结合工业级开发经验&#xff0c;带你掌握真正实用的编程精髓。1.1 const关键字的工程级应…...

OpenClaw多模型混搭方案:Kimi-VL-A3B-Thinking与Qwen3-32B协同工作流

OpenClaw多模型混搭方案&#xff1a;Kimi-VL-A3B-Thinking与Qwen3-32B协同工作流 1. 为什么需要多模型混搭&#xff1f; 去年冬天&#xff0c;当我第一次尝试用OpenClaw处理图文混排的文档时&#xff0c;遇到了一个尴尬的问题&#xff1a;纯文本模型Qwen3-32B对图片内容视而不…...

MCU固件Flash分区设计与优化实践

1. 项目概述在嵌入式系统开发中&#xff0c;MCU固件的Flash划分是一个看似基础却至关重要的环节。作为一名经历过多次"翻车"的嵌入式工程师&#xff0c;我深刻理解合理的Flash分区方案对项目稳定性、可维护性和功能扩展性的影响。今天我们就来聊聊几种常见的Flash划分…...

RP2040上的CBUS协议栈:CAN总线模型铁路通信实现

1. CBUSACAN2040 库深度解析&#xff1a;面向 RP2040 平台的 MERG CBUS 协议栈实现1.1 项目定位与工程价值CBUSACAN2040 是一个专为 Raspberry Pi Pico&#xff08;RP2040&#xff09;系列微控制器设计的嵌入式通信库&#xff0c;其核心使命是将英国模型铁路电子组织 MERG&…...

OpenClaw技能扩展实战:千问3.5-27B驱动公众号自动发布系统

OpenClaw技能扩展实战&#xff1a;千问3.5-27B驱动公众号自动发布系统 1. 为什么需要自动化公众号发布 作为一个技术博主&#xff0c;我每周都要在公众号发布2-3篇技术文章。最让我头疼的不是写作本身&#xff0c;而是发布前的繁琐流程&#xff1a;手动排版Markdown、上传图片…...