栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

不使用中间值交换两个变量的值方法及其原理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

不使用中间值交换两个变量的值方法及其原理

目录

1.常规方法

2.使用加法

3.使用^来实现


1.常规方法

  在平时时我们要交换两个变量的值时,我们常常使用暂存变量来保存中间数,以此来实现交换两个变量的值,这种方法简单且易实现。

void change(char* p1, char* p2)
{
	int tmp = 0;
	tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

 2.使用加法

  这个方法的原理很简单就是使用了一点加法知识。

void change(char* p1, char* p2)
{
	*p1 = *p1 + *p2;
	*p2 = *p1 - *p2;
	*p1 = *p1 - *p2;
}

由代码可见,这个方法是将两个值的和存放在*p1中,然后用*p2存放和减去*p2的值得到即是原来*p1的值,最后用*p1存放和减去*p2的值得到的即是原来*p2的值,如此便交换了两个变量的值

即   sum=a+b;*p1=a,*p2=b;

过程中的发展:*p2=(a+b)-b=a;

*p1=(a+b)-a=b。

3.使用^的方法

  这种方法巧妙的使用了异或来达成目的。

void change(char* p1, char* p2)
{
	*p1 = *p1 ^ *p2;
	*p2 = *p1 ^ *p2;
	*p1 = *p1 ^ *p2;
}

  首先我们来看下这一过程中的变化

*p1=a;*p2=b;a=1011,

                     b=0110;

*p1=*p1^*p2   =1101;

*p2=*p1^*p2  =1011;

*p1=*p1^*p2  =0110;

异或操作可以理解为相异为真,相同为假,当使用第一轮异或的时候就是将两个数的真假信息存放在了一个变量中,第二轮异或即是将a的值解码出来给*p2,第三轮异或则是将b的值解码出来给*p。

这是利用了异或的自反性:a ^ b ^ a = b

异或和加法的关系:在伽罗华域上加减运算等价,即异或运算

异或运算可以看做是在本位上忽略进位的的相加。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号