首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >交换两个数的三种方法原理解析

交换两个数的三种方法原理解析

作者头像
梦飞
发布2022-06-23 12:31:04
发布2022-06-23 12:31:04
5840
举报
文章被收录于专栏:csdn文章同步csdn文章同步

问题:交换以下两个数:

代码语言:javascript
复制
int m = 12;
int n = 5;

方法一

代码语言:javascript
复制
// 方法一:提供一个临时变量。
int temp = m;
m = n;
n = temp;

原理:使用第三个变量暂存其中一个值,以便交换。就像要交换两杯水,先把其中一杯水倒到第三个杯子。这是最容易想到的方法,但需要额外引入一个变量。

方法二

代码语言:javascript
复制
// 方法二:使用加减法。当m和n较大时,有可能出现精度损失
m = m + n;//m = 12 + 5;
n = m - n;//n = 17 - 5;
m = m - n;//m = 17 - 12;

原理:先将m变成两个数的和,这样就和n共同存储了原来两个数的信息,通过减法将n变成原来m,此时m和n仍然可以完整保存两个数的信息,再通过减法将m变回原来的m。这个方法不容易想到,并且当m和n较大时,有可能出现精度损失。

方法三

代码语言:javascript
复制
// 方法三:使用异或。优点:没有上面两种方法的缺点。 缺点:难!
m = m ^ n;
n = m ^ n; // (m ^ n) ^ n == m
m = m ^ n; // (m ^ n) ^ m == n

原理:使用异或的对称特性,与同一个数进行两次异或运算之后还是原来的数。这个方法原理类似于方法二,不需要提供第三个变量,但由于使用的是异或而不是加法,所以不会出现精度损失。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一
  • 方法二
  • 方法三
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档