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

张开发
2026/4/10 3:08:13 15 分钟阅读

分享文章

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、比较运算、逻辑运算组合使用需关注括号优先级和短路效果。

更多文章