[c语言日寄]c语言也有“回”字的多种写法——整数交换的三种方式
大家好啊,在今天的快乐刷题中,我们遇到了这样一道题目:
题目
写出 三种不同方式的 交换两个整数变量的 函数
交换变量的三种解法
常规方式
想要交换两个变量很简单,第一种方式就是新建一个临时变量,具体流程如下:

具体到c语言代码:
//传递指针实现跨函数修改值
void common(int* a, int* b) {int mid = 0;mid = *a;*a = *b;*b = mid;return;
}
加减法交换
如果在不使用临时变量的情况下,我们可以也利用加减法来实现数值的交换:
我们结合具体的算法进行分析:
// 加减运算交换法void add_sub(int* a, int* b) {*a = *a + *b;*b = -*b;*b += *a;*a = *a - *b;return;
}
其具体的运算过程如下:

位运算交换
在了解这个算法前,我们可以先复习一下本方法的主角:异或运算
异或运算简介
异或运算是一种二进制运算,它对两个位进行操作。其运算规则如下:
当两个位不相同时,结果为1。
当两个位相同时,结果为0。
用符号“^”表示异或运算,其真值表如下:
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
例如,对于两个整数 5 和 3,它们的二进制表示分别为 101 和 011。进行异或运算的过程如下:
101 (5)^ 011 (3) =110 (6)
因此,5 异或 3 的结果是 6。
异或运算的性质

用异或运算实现交换
基于上面的基础知识,我们来看一看以下的算法:
void bit(int* a, int* b) {*a = *a ^ *b;*b = *b ^ *a;*a = *a ^ *b;return;
}
具体过程如下:

序号2的超级详细的运算过程如下:

日常使用推荐哪一种运算方法呢?
当然是常规算法啦!
为什么不是看上去更加省内存的 位运算法 或者 加减交换法 呢?
常规方式
优点
- 可读性高:代码非常直观,容易理解和维护。即使是初学者也能快速理解其逻辑。
- 安全性高:不会出现任何溢出或错误情况,非常安全。
- 适用性强:适用于所有情况,包括 a 和 b 指向同一个地址的情况。
缺点
占用额外内存:需要一个临时变量来存储其中一个值,但现代编译器通常会对这种简单的交换操作进行优化,性能非常接近位运算交换。
位运算交换
优点
- 不占用额外内存:不需要临时变量,节省了内存空间,特别是在资源受限的环境中(如嵌入式系统)非常有用。
- 不会溢出:与加减法相比,位运算不会导致整数溢出,因此更加安全。
缺点
- 可读性差:代码较为复杂,需要对位运算的性质有较深的理解。对于不熟悉位运算的开发者来说,可能需要花费更多时间来理解其逻辑。
- 存在不适用的情况:如果 a 和 b 指向同一个地址,会导致 a 和 b 都变为0。
- 性能差异:在某些情况下,位运算可能比简单的临时变量交换稍慢,但这种差异通常可以忽略不计。不过,位运算的复杂性可能会导致编译器优化不如临时变量交换。
推荐使用临时变量交换的原因
在大多数情况下,笔者都推荐使用临时变量来交换两个整数的内容:
- 可读性高:代码更直观,容易理解和维护。
- 安全性高:基本不会出现任何错误情况,非常安全。
- 适用性强:适用于所有情况,无需额外检查。
相关文章:
[c语言日寄]c语言也有“回”字的多种写法——整数交换的三种方式
大家好啊,在今天的快乐刷题中,我们遇到了这样一道题目: 题目 写出 三种不同方式的 交换两个整数变量的 函数 交换变量的三种解法 常规方式 想要交换两个变量很简单,第一种方式就是新建一个临时变量,具体流程如下&…...
RocketMQ 知识速览
文章目录 一、消息队列对比二、RocketMQ 基础1. 消息模型2. 技术架构3. 消息类型4. 消费者类型5. 消费者分组和生产者分组 三、RocketMQ 高级1. 如何解决顺序消费和重复消费2. 如何实现分布式事务3. 如何解决消息堆积问题4. 如何保证高性能读写5. 刷盘机制 (topic 模…...
优化 Azure Synapse Dedicated SQL Pool中的 SQL 执行性能的经验方法
在 Azure Synapse Dedicated SQL Pool中优化 SQL 执行涉及了解底层体系结构(例如分布和分区)、查询优化(例如避免不必要的子查询和联接),以及利用具体化视图和 PolyBase 等工具进行高效数据加载。 1.有效使用分布和分…...
详解英语单词“pro bono”:公益服务的表达(中英双语)
中文版 详解英语单词“pro bono”:公益服务的表达 一、词义解释 “Pro bono” 是一个源自拉丁语的短语,完整表达为 “pro bono publico”,意思是“为了公众利益”(for the public good)。在现代英语中,它…...
16. C语言 字符串详解
本章目录: 前言C 字符串的基础概念字符串的定义字符串的内存表示 常见的字符串操作函数示例代码 深入探讨字符串长度计算strlen 与 sizeof 的区别 字符串操作的注意事项**1. 字符数组的大小**2. 字符数组和字符指针的区别3. 使用安全函数 字符串的遍历与格式化输出**遍历字符串…...
使用Buildroot开始嵌入式Linux系统之旅-3
文章目录 at91bootstrap操作教程修改at91bootstrap具体配置重新编译at91bootstrap U-Boot操作教程修改U-Boot具体配置重新编译U-Boot Linux Kernel操作教程修改Linux Kernel具体配置重新编译Linux Kernel buildroot操作进阶生成图形化软件模块依赖关系查看具体软件模块依赖关系…...
[免费]SpringBoot+Vue新能源汽车充电桩管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue新能源汽车充电桩管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue新能源汽车充电桩管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息化时代的到来࿰…...
【已解决】【记录】2AI大模型web UI使用tips 本地
docker desktop使用 互动 如果需要发送网页链接,就在链接上加上【#】号 如果要上传文件就点击这个➕号 中文回复 命令它只用中文回复,在右上角打开【对话高级设置】 输入提示词(提示词使用英文会更好) Must reply to the us…...
44.ComboBox的数据绑定 C#例子 WPF例子
固定最简步骤,包括 XAML: 题头里引入命名空间 标题下面引入类 combobox绑定资源属性和选择属性,block则绑定和combobox一样的选择属性 C#: 通知的类,及对应固定的任务 引入字段 引入属性 其中资源是只读的 选…...
物联网之传感器技术
引言 在数字化浪潮席卷全球的今天,物联网(IoT)已成为推动各行各业变革的重要力量。而物联网传感器,作为物联网感知层的核心技术,更是扮演着不可或缺的角色。它们如同人类的五官,能够感知物理世界中的各种信…...
QTreeWidget QTreeWidgetItem
QTreeWidgetItem 是 Qt 框架中用于在 QTreeWidget 中表示树形结构中每个节点的类。它是 QTreeWidget 的一部分,允许您创建和管理层次结构的数据展示。 QTreeWidgetItem 用于表示树形结构中的单个节点。 添加子节点: 可以通过 addChild() 方法向节点添加…...
torch.einsum计算张量的外积
torch.einsum 是一种强大的张量操作工具,可以通过爱因斯坦求和约定(Einstein summation convention)来简洁地表示复杂的张量运算。通过它,我们可以高效地计算矩阵乘法、转置、点积、外积等操作。 以下是关于如何使用 torch.einsum 计算两个四维张量在第三维度上的外积的解…...
PostgreSQL 超级管理员详解
1. 什么是 PostgreSQL 超级管理员 PostgreSQL 超级管理员(superuser)是拥有数据库系统最高权限的用户。他们可以执行任何数据库操作,包括但不限于创建和删除数据库、用户、表空间、模式等。超级管理员权限是 PostgreSQL 中权限的最高级别。 …...
RabbitMQ 工作模式使用案例之(发布订阅模式、路由模式、通配符模式)
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…...
【2024年华为OD机试】(C卷,100分)- 机场航班调度程序 (Java JS PythonC/C++)
一、问题描述 题目描述 XX市机场停放了多架飞机,每架飞机都有自己的航班号,如CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息…...
Vue.js组件开发-使用地图绘制轨迹
在Vue.js中开发一个组件来展示地图并绘制轨迹,可以使用诸如Leaflet.js、Mapbox GL JS或百度地图等地图库。这些库提供了丰富的API来创建和定制地图,以及绘制路径、标记和其他地图元素。 示例: 1. 安装Leaflet.js 首先,需要安装…...
vue 与 vue-json-viewer 实现 JSON 数据可视化
前言 接口的调试和测试是确保系统稳定性的重要步骤。为了让开发人员和测试人员能够直观地查看接口返回的 JSON 数据,使用合适的工具至关重要。vue-json-viewer 插件为 vue 开发者提供了一个简单而强大的解决方案。本文将详细介绍如何在 vue 项目中使用该插件&#x…...
ubuntu Android : adb logcat 过滤多个log
指定字符串的log,可以用下面的形式,注意加-E和单引号: adb shell " logcat | grep -E strings1|strings2 " 参考:Android : adb logcat 过滤多个log 用adb shell “ logcat | grep -E ‘strings1| strings2 ‘ “ 形…...
kubeneters-循序渐进Cilium网络(三)
文章目录 概要命名空间之间的路由同一节点上的 Pod 到 Pod 路由跨节点的 Pod 间路由总结 概要 在前一篇讨论网络接口的内容中,详细分析了如何识别所有参与 Pod 间路由的接口。同时,以简明的非技术语言阐述了 Cilium 在 Kubernetes 集群中的路由机制。接…...
编译与汇编
本文来自《程序员的自我修养》 编译过程是把预处理完的文件进行一系列词法分析,语法分析,语义分析以及优化后生成相应的汇编文件代码。 现在版本的GCC把预编译和编译两个步骤合并为一个步骤。 gcc -S HelloWorld.c HelloWorld.sint main() {//test/* …...
ThinkPad开机嘀嘀响或报2100/2110错误?可能是硬盘松了!自己动手检测与修复指南
ThinkPad开机嘀嘀响或报2100/2110错误?三步排查硬盘接触不良问题ThinkPad用户对那个标志性的开机"嘀嘀"声再熟悉不过——正常情况下它意味着系统自检通过。但当这个声音变成急促的报警音,伴随屏幕上出现"2100 Detection error"或&qu…...
除了排错,你可能不知道OPC Expert v8.1还能做这些:数据归档、计算与冗余实战
解锁OPC Expert v8.1的隐藏潜力:数据归档、实时计算与冗余架构实战指南在工业自动化领域,OPC Expert常被视为故障排查的"急救箱",但它的能力远不止于此。当大多数工程师还在用它解决DCOM配置问题时,少数先行者已经用它重…...
小米MIMO最新邀请码
欢迎使用,各得10元体验金...
基于ESP32与MQTT的家庭环境监测系统:从传感器选型到数据可视化实战
1. 项目概述与核心价值最近几年,我身边越来越多的朋友开始关注家里的空气质量、温湿度这些看不见摸不着,但又实实在在影响生活舒适度和健康的环境指标。从新装修的房子担心甲醛,到有老人小孩的家庭在意PM2.5和二氧化碳浓度,再到南…...
从游戏引擎到仿真平台:手把手教你用AirSim+UE4搭建你的第一个无人机/自动驾驶仿真环境
从游戏引擎到仿真平台:构建AirSimUE4无人机与自动驾驶仿真环境实战指南当游戏引擎遇上机器人算法测试,会碰撞出怎样的火花?微软开源的AirSim项目将虚幻引擎(Unreal Engine)从游戏开发领域引入到自动驾驶和无人机研究的…...
PCL 基于强度的双边滤波【2026最新版】
目录 一、算法原理 1、计算步骤 2、算法源码 3、函数解析 4、参考文献 二、代码实现 三、结果展示 四、滤波后未发生变化的原因 五、解决办法 六、结果展示 七、相关链接 本文由CSDN点云侠原创,博客长期更新,本文最近一次更新时间为:2026年5月24日。 一、算法原理 1、计算…...
Hindsight API参考:REST接口完整文档
Hindsight API参考:REST接口完整文档 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight是一个强大的Agent Memory系统,提供了全面的REST API接口&…...
3分钟解锁网易云音乐NCM文件:ncmdumpGUI小白也能懂的完整教程
3分钟解锁网易云音乐NCM文件:ncmdumpGUI小白也能懂的完整教程 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经下载了网易云音乐的歌曲&a…...
INT8量化下TVA注意力对齐精度保障方案
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
3分钟掌握JetBrains IDE试用期重置:终极完整指南
3分钟掌握JetBrains IDE试用期重置:终极完整指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter JetBrains IDE试用期重置工具(ide-eval-resetter)是一个开源项目,专…...
