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

【C++】赋值运算与变量交换的深入探讨


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯赋值操作符与连续赋值
  • 💯常见复合赋值符及其功能
  • 💯位操作符中的复合赋值符
  • 💯题目一:账户余额练习
    • 题目描述
    • 代码实现
    • 运行结果
    • 分析
  • 💯题目二:交换两个变量的值
    • 题目描述
    • 方法 1:使用第三个变量
    • 方法 2:不使用第三个变量(加减法)
    • 方法 3:使用位运算符(异或运算)
    • 方法 4:使用标准库函数 `std::swap`
  • 💯代码优化与可读性
    • 总结
  • 💯小结


在这里插入图片描述


💯前言

  • 在学习 C++ 语言 的过程中,赋值操作符复合赋值符 以及 变量交换 是基础中的核心概念,但也是理解编程逻辑和代码效率优化的重要环节。本文通过深入解析 赋值操作符变量交换 的实现方法、优化思路及扩展应用,帮助读者全面理解其机制和作用。
    C++ 参考手册
    在这里插入图片描述

💯赋值操作符与连续赋值

在这里插入图片描述
在 C++ 中,赋值操作符 = 用于将右侧的值赋给左侧的变量,这与数学中的等号有所不同。在编程中,赋值是一种动作,赋值的执行顺序是 从右到左 进行的,这意味着首先计算右侧表达式的值,然后将结果赋给左侧变量。

例如,以下代码演示了连续赋值的过程:

int a, b, c;
a = b = c = 3;

执行过程

  • 首先执行 c = 3,将值 3 赋给 c
  • 接着执行 b = c,将 c 的值赋给 b,此时 b 也为 3
  • 最后执行 a = b,将 b 的值赋给 a,最终 a 的值为 3

这种从右到左的赋值特性对于理解复杂表达式的计算顺序至关重要。

赋值操作符 是编程中的基础核心环节,理解其工作原理对于编写高效且易读的代码至关重要。在实际编程中,赋值操作符 的使用贯穿于 变量初始化值的更新 以及 表达式计算 等几乎所有的代码逻辑。熟悉赋值操作的执行方式不仅能帮助编程者编写出更优雅的代码,还能更好地理解编译器在代码优化过程中的行为。


💯常见复合赋值符及其功能

在这里插入图片描述
C++ 提供了一些复合赋值符,旨在简化代码的书写。这些复合赋值符包括 +=-=*=/= 等,它们将算术操作与赋值结合在一起,减少了代码的冗余,提高了可读性和效率。

复合赋值符示例一般写法作用
+=a += 10a = a + 10a 增加 10 并重新赋值给 a
-=a -= 10a = a - 10a 减去 10 并重新赋值给 a
*=a *= 10a = a * 10a 乘以 10 并重新赋值给 a
/=a /= 10a = a / 10a 除以 10 并重新赋值给 a
%=a %= 10a = a % 10a 除以 10 的余数赋值给 a

复合赋值符的使用使得代码更简洁和易读,但在某些情况下,过度的简化可能会导致代码的可理解性下降。特别是对于复杂逻辑,应根据代码的复杂度和读者的知识水平来平衡代码的简洁性与可读性。


💯位操作符中的复合赋值符

在这里插入图片描述
除了常见的 算术操作符C++ 还支持将 复合赋值符位操作符 结合使用。这些操作符在对 二进制数据 进行操作时非常有用,例如在 硬件编程性能优化资源受限 的场景中,位操作能够带来显著的效率提升。

复合赋值符示例一般写法作用
>>=a >>= 1a = a >> 1a 右移 1 位,并重新赋值给 a
<<=a <<= 1a = a << 1a 左移 1 位,并重新赋值给 a
&=a &= 10a = a & 10a10 进行按位与运算,并赋值给 a
|=a |= 10a = a | 10a10 进行按位或运算,并赋值给 a
^=a ^= 10a = a ^ 10a10 进行按位异或运算,并赋值给 a

对于需要直接控制 硬件低层次编程,或者在需要对 内存性能 进行严格优化的场景中,位操作符 的高效性使其成为一种不可或缺的工具。熟练掌握这些操作符能够帮助程序员编写更高效的低级代码。


💯题目一:账户余额练习

在这里插入图片描述
为了进一步理解赋值操作符的使用,我们可以通过一个简单的账户余额练习来实际操作变量的赋值和更新。


题目描述

在这里插入图片描述
假设小明的账户初始余额为 100 元,经过以下几个操作:

  • 存入 10 元。
  • 花费 20 元购物。
  • 将账户中剩余的钱全部取出。

要求:在每次操作后输出账户的余额。


代码实现

#include <iostream>
using namespace std;

int main() {
    int balance = 100; // 初始化账户余额为100元
    cout << "初始余额: " << balance << endl;

    balance += 10; // 存入10元
    cout << "存入10元后余额: " << balance << endl;

    balance -= 20; // 花费20元
    cout << "花费20元后余额: " << balance << endl;

    balance = 0; // 取出所有余额
    cout << "取出所有余额后账户余额: " << balance << endl;

    return 0;
}

在这里插入图片描述


运行结果

初始余额: 100
存入10元后余额: 110
花费20元后余额: 90
取出所有余额后账户余额: 0

在这里插入图片描述


分析

在这里插入图片描述

  • 存款操作:通过 balance += 10 增加余额,使用 复合赋值符 简化了代码的书写。
  • 消费操作:通过 balance -= 20 减少余额,同样使用了 复合赋值符,使得代码更加紧凑。
  • 取出余额操作:直接将 balance 设为 0,表达直观且符合逻辑。

这个练习展示了如何通过 赋值复合赋值符变量 进行更新,并在每一步操作后输出结果。通过这样的实践,我们不仅能掌握如何操作变量,还能理解每个操作的具体意义。


💯题目二:交换两个变量的值

  • 在编程中,交换两个变量的值 是一个非常经典的课题。这个问题可以通过多种方法来实现,以下介绍几种常见的方法,并分析其优缺点。
    交换值
    在这里插入图片描述

题目描述

输入两个整数 ab,交换 ab 的值,使 a 的值等于原来的 bb 的值等于原来的 a

输入样例:

2 3

输出样例:

3 2

在这里插入图片描述


方法 1:使用第三个变量

#include <iostream>
using namespace std;

int main()
{
	int a, b, c;
	cin >> a >> b;
	c = a;
	a = b;
	b = c;
	cout << a << " " << b << endl;
	return 0;
 } 

在这里插入图片描述

优点

  • 逻辑简单,易于理解,适合初学者。
  • 没有溢出风险,适用于各种数据类型。

缺点

  • 需要额外的存储空间来保存临时变量。

方法 2:不使用第三个变量(加减法)

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    a = a + b;
    b = a - b;
    a = a - b;
    cout << a << " " << b << endl;
    return 0;
}

在这里插入图片描述

优点

  • 不需要额外的存储空间,节省内存。

缺点

  • 如果 ab 的值过大,可能会导致整数溢出,存在一定的风险。

方法 3:使用位运算符(异或运算)

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    cout << a << " " << b << endl;
    return 0;
}

在这里插入图片描述

优点

  • 不需要额外的变量,且没有溢出风险,运算效率较高。

缺点

  • 对于初学者来说不太直观,仅适用于整数类型,理解难度较大。

方法 4:使用标准库函数 std::swap

C++ 标准库提供了一个 std::swap 函数,可以直接用于交换两个变量的值。

#include <iostream>
#include <utility> // 引入头文件
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    swap(a, b); // 使用标准库函数交换
    cout << a << " " << b << endl;
    return 0;
}

在这里插入图片描述

优点

  • 简洁且直观,代码量少,适合各种数据类型。
  • 由标准库实现,安全可靠。

缺点

  • 需要引入额外的头文件。

💯代码优化与可读性

🌴 小提示:使用 复合赋值操作符 能够让代码更加简洁,但要注意,过度追求代码简洁可能会牺牲 可读性,特别是在 团队合作 中,代码的 可读性 至关重要。

在编程中,代码的 可读性效率 同等重要。虽然 复合赋值符 能够减少代码的冗余,但在某些情况下,过于简洁的代码可能不易于他人理解,特别是 初学者

例如:

money += 10; // 简洁,但可能不够直观。

可以将其分解为:

money = money + 10; // 更加显而易见,尤其适合初学者。

在编写代码时,尤其是在团队协作中,编写易于理解的代码往往比追求简洁更为重要,确保代码的可维护性和可读性至关重要。
在这里插入图片描述


总结

  • 对于 初学者,尽量将每一步的逻辑详细展现,以便更好地理解 代码执行 的过程。
  • 对于 团队协作,应遵循 代码规范,确保代码具有良好的 可读性一致性

💯小结

  • 在这里插入图片描述
    赋值运算符 是编程中最基础的操作之一,理解其原理有助于更好地掌握 变量的控制代码逻辑
  • 复合赋值符 能够让代码更为 简洁,但应在 简洁性可读性 之间找到平衡点。
  • 变量交换 是一个经典的编程练习,通过多种实现方式,展示了编程中灵活使用 不同工具 的能力。

无论是 赋值操作 还是 变量交换,这些都是编程的基础操作,掌握这些知识将为更深入的编程学习打下坚实的基础。对于每一位程序员而言,熟练掌握这些基本概念是迈向高级编程的重要一步。通过不断的 练习 与应用,程序员们能够在复杂的编程场景中游刃有余。希望这篇文章能帮助你更好地理解 C++ 中的这些基础概念,使你在编程的道路上更进一步,最终掌握更为复杂和高级的编程技巧,成长为一名优秀的开发者。

学习编程的过程不仅是知识的积累,更是对 思维方法 的不断反思和改进。今天你可能在为 赋值变量交换 的概念而苦恼,但在不久的将来,你会发现这些基础概念是解决复杂问题的关键所在。每一个编程概念的掌握,都是你成长的阶梯。继续努力,相信你一定能够在编程的世界中走得更加长远而深远!


在这里插入图片描述



http://www.kler.cn/a/418062.html

相关文章:

  • 深度学习之 DenseNet和2图像分割常用数据集
  • B站狂神说Mybatis+Spring+SpringMVC整合理解(ssm框架整合)
  • Mybatis:CRUD数据操作之删除一行数据
  • Redis 分布式锁实现方案
  • python实现自动计算排工期
  • 速盾:高防 CDN 中高级缓存有什么用?
  • Agent构建总结(LangChain)
  • C/C++基础知识复习(32)
  • Clickhouse 数据类型
  • 【遥感综合实习】专题一 多时相多波段遥感影像的机器学习地物分类研究
  • 第十一课 Unity编辑器创建的资源优化_预制体和材质篇(Prefabs和Materials)详解
  • java-kafka面试相关基础题目整理01
  • 基于单片机的微型电子琴建模
  • ASP.NET Core 负载/压力测试
  • Python语法基础(四)
  • 多线程安全单例模式的传统解决方案与现代方法
  • 关于线扫相机的使用和注意事项
  • shell脚本练习(2)
  • Java安全—原生反序列化重写方法链条分析触发类
  • C++趣味编程玩转物联网:基于树莓派Pico控制无源蜂鸣器-实现音符与旋律的结合
  • 递归算法讲解(c基础)
  • Docker扩容操作(docker总是空间不足)
  • C#基础之预处理器,异常处理
  • 三维扫描仪-3d扫描建模设备自动检测尺寸
  • Android笔记【10】
  • 【前端开发】JS+Vuew3请求列表数据并分页