C++运算符与表达式
目录
前言
本系列文章目的在于将C++的基础内容完全夯实,最终目的是为后期的深度学习在算法上有一定的铺垫,前期在学习数学的过程中也会有很大的帮助,相对于python来说C++有自身的优势,文末会有 C++的优势对比于python的维度点说明,所以我这里先写了C++的用法说明,后续会有Python的,各自有各自的优势,我们要根据具体的需求来分析使用哪种语言更为方便,其它的语言暂时不在考虑范畴之内,我们的目标是AI深度学习。
前置环境与代码结构文章:
整体文章目录:入门 C++ 课程目录
📚本篇目标
1. 掌握C++中5类基础运算符的语法与运算规则
2. 理解运算符优先级与结合性对表达式的影响
3. 能够正确编写复合赋值表达式
4. 熟练运用比较/逻辑运算符构建条件表达式
重难点说明
重点突破:
整数除法特性:`10/3=3`(结果自动取整)
取模运算的符号规律:结果符号与被除数一致(C++11标准)
逻辑运算符短路特性:`&&`遇假即停,`||`遇真即停难点攻克:
区分`=`与`==`的用法(常见错误点)
复合表达式求值顺序:`a = b += c++ * --d`
布尔值的隐式转换:非零为true,零为false
学习正文
1、算术运算符
基础运算示例:
int a = 10 + 3; // 13
int b = 10 - 4; // 6
int c = 10 * 2; // 20
int d = 10 / 3; // 3(整数除法)
double e = 10.0 / 3; // 3.333(浮点除法)
int f = 10 % 3; // 1(取模)
int g = -10 % 3; // -1(C++11标准)
核心要点:
优先级:() > * / % > + -
混合运算自动类型提升:int + double → double
自增运算符陷阱:
int i = 5;
int m = i++ * 2; // m=10, i=6(后置)
int n = ++i * 2; // n=12, i=6(前置)
2. 赋值运算符
基础与复合操作:
int x = 10; // 基本赋值
x += 5; // 等价于 x = x + 5
x *= 3; // 等价于 x = x * 3
int y = (x = 20); // 赋值表达式返回值
// 链式赋值示例
int a, b, c;
a = b = c = 100; // 从右向左结合
3. 比较与逻辑运算符
条件构建三剑客:
// 比较运算符
bool b1 = (10 > 5); // true
bool b2 = (10 == 10); // true
// 逻辑运算符
bool flag = (x > 0) && (y < 100); // 逻辑与
bool isOK = !flag; // 逻辑非
// 短路特性演示
int i = 0;
(i != 0) && (10/i > 3); // 安全避免除以零
练习题
单选题-5
1. 表达式 `(5 + 3) * 2` 的结果是?
A) 16
B) 11
C) 13
D) 10
2. 在C++中,`-15 % 4` 的结果是?
A) -3
B) 1
C) -1
D) 3
3. 执行 `int i=5; int j = ++i + i++;` 后,j 的值是?
A) 12
B) 13
C) 14
D) 15
4. 表达式 `10 / 3.0` 的结果类型是?
A) int
B) float
C) double
D) long
5. 下列运算符优先级最高的是?
A) +
B) *
C) ()
D) %
多选题-3
1. 以下哪些运算符会改变操作数的值?(多选)
A) +
B) +=
C) ++
D) ==
2. 关于逻辑运算符的正确描述有?(多选)
A) `&&` 需要两侧都为真才返回真
B) `||` 的优先级高于 `&&`
C) `!` 是单目运算符
D) 逻辑表达式返回值只能是0或1
3. 下列哪些表达式是合法的?(多选)
A) a = b = 5`
B) 5 = x
C) x += y *= 3
D) ++(a+b)
判断题-2
1. x *= y + 3 等价于 x = x * y + 3 ( )
2. 在C++中,true 的整型值为1,false 为0 ( )
代码题-1
// 编写函数判断一个数是否是偶数且大于10
bool checkNumber(int num) {
// 补全代码
}
📝 答案解析
单选题
-
A) 16
解析:括号优先级最高,先计算5+3=8,再8*2=16 -
C) -1
解析:C++取模结果符号与被除数一致,-15 ÷ 4 = -3余-3,但根据C++11标准,-15%4=-3*4 + (-3) → 余数为-3,但实际编译器实现可能不同,需注意 -
A) 12
解析:++i
先增到6,表达式值为6;i++
先用后增,表达式值为6,此时i=7,最终j=6+6=12 -
C) double
解析:3.0是double类型,运算时int自动提升为double -
C) ()
解析:括号优先级最高,其次是* / %,最后是+ -
多选题
-
B、C
解析:+=和++会改变操作数值,+和==不改变 -
A、C
解析:B错(&&优先级高于||),D错(C++中bool类型为true/false,但可隐式转换为1/0) -
A、C
解析:B错(不能给字面量赋值),D错(自增操作数必须为左值)
判断题
-
×
解析:正确等价应为x = x * (y + 3)
-
√
解析:C++中布尔值隐式转换时,true→1,false→0
代码题
bool checkNumber(int num) {
return (num % 2 == 0) && (num > 10);
}
// 解析:使用取模判断偶数,逻辑与连接两个条件
总结
运算符的本质是数据操作的指令符号,表达式则是通过运算符连接的操作序列。掌握运算符特性如同掌握数学公式,是构建程序逻辑的基础能力。通过大量练习培养运算符使用的肌肉记忆!
聚焦算术、赋值、比较、逻辑四类运算符的应用规则与底层特性。重点剖析整数除法的取整机制(如`10/3=3`)、取模运算的符号规律(结果符号与被除数一致)及逻辑运算符的短路特性(`&&`遇假即停,`||`遇真即停)。通过典型代码示例演示复合赋值(`+=`)、自增优先级(`i++`与`++i`差异)和隐式类型转换(`int+double→double`)等关键概念。针对常见易错点如`=`与`==`混淆、表达式求值顺序等设置梯度练习,包含16道客观题与1道代码实践题,强化运算符优先级(`()>* /%>+ -`)和结合性(右结合`a=b=c`)的实战应用。通过`(year%4==0 && year%100!=0)||year%400==0`等逻辑表达式设计,培养将数学逻辑转化为代码的能力,最终建立规范的运算符使用范式与表达式构建思维。
C++的优势对比于python的维度点说明
对比维度 | C++ 优势 | Python 情况 |
---|---|---|
性能效率 | 1. 执行速度快:编译型语言,将代码编译为机器码,处理大量数据、复杂算法时效率高,能充分利用硬件资源。 2. 内存管理精细:允许程序员直接管理内存,精确控制分配和释放,优化内存使用,适合对内存要求苛刻的系统。 | 1. 执行速度慢:解释型语言,代码逐行解释执行,在处理大规模数据和复杂计算时性能较差。 2. 内存管理自动化:Python 有自动的垃圾回收机制,虽然方便但可能导致内存使用不够精细,在内存紧张的场景下可能出现问题。 |
底层控制能力 | 1. 硬件访问能力强:可直接访问计算机硬件资源,如寄存器、内存地址等,便于与底层硬件高效交互,适用于驱动程序、嵌入式系统开发。 2. 系统级编程优势:在操作系统、编译器、数据库管理系统等系统软件开发中,能与底层系统更好交互,实现资源精细管理和控制,提升系统性能和稳定性。 | 底层控制能力弱:Python 主要用于高层级的应用开发,对底层硬件的直接访问能力有限,在系统级编程方面不够灵活和高效。 |
语言特性 | 1. 强类型语言:编译时进行严格类型检查,有助于发现早期错误,提高代码稳定性和可靠性,减少运行时类型不匹配错误。 2. 支持多种编程范式:支持面向对象、泛型、函数式等多种编程范式,开发者可根据问题和需求灵活选择。 | 1. 动态类型语言:类型检查在运行时进行,虽然编写代码更灵活,但可能在运行时出现类型相关的错误,代码的稳定性和可维护性相对较弱。 2. 编程范式相对有限:主要以面向对象和函数式编程为主,泛型编程的支持不如 C++ 强大。 |
可移植性 | 1. 跨平台能力:编写的代码可在不同操作系统上编译运行,只要有相应编译器和运行时环境,适合开发跨平台应用。 2. 库的可移植性:许多开源库和框架(如 Boost、Qt)具有良好可移植性,可在不同平台使用,减少跨平台开发工作量。 | 1. 跨平台性依赖解释器:Python 代码的跨平台性依赖于 Python 解释器,虽然大多数情况下能在不同操作系统上运行,但在一些涉及底层系统调用的场景下可能会有兼容性问题。 2. 部分库存在兼容性问题:虽然 Python 有丰富的库,但部分库在不同平台上的表现和兼容性可能存在差异。 |
生态系统和工具链 | 1. 成熟的开发工具:有 Visual Studio、CLion、Eclipse 等成熟开发工具和集成开发环境,提供强大代码编辑、调试、性能分析等功能,提高开发效率。 2. 丰富的库资源:拥有大量专业级库,如用于数学计算的 LAPACK、图形处理的 OpenGL、网络编程的 ACE 等,为专业领域开发提供支持。 | 1. 开发工具相对简单:Python 的开发工具(如 PyCharm、VS Code 等)功能相对侧重于代码编辑和基本调试,在一些复杂的性能分析和底层调试方面不如 C++ 的开发工具强大。 2. 库更侧重于高层应用:Python 的库主要用于数据分析、机器学习、Web 开发等高层应用场景,在底层系统编程和高性能计算方面的专业库相对较少。 |
安全性和稳定性 | 1. 资源管理安全:通过智能指针等机制,一定程度上保证资源安全管理,避免内存泄漏和悬空指针问题,提升程序稳定性和安全性。 2. 代码审查严格:语法相对复杂,在大型项目中严格的代码审查和规范可确保代码质量和安全性,减少潜在漏洞和风险。 | 1. 资源管理自动化存在隐患:自动垃圾回收机制可能导致一些资源管理问题,例如循环引用可能会造成内存泄漏,虽然 Python 有解决方案,但增加了复杂性。 2. 代码灵活性带来风险:动态类型和简洁的语法使得代码编写容易,但也可能导致代码的可读性和可维护性下降,增加了出现安全漏洞的风险。 |