不使用第三个变量,交换 a 和 b 的值


前言

本章内容用于个人学习


提示:以下是本篇文章正文内容,下面案例可供参考

一、算数运算

代码如下(示例):

int a = 2, b = 12;
a = b - a; //a = 10;b = 12
b = b - a; //a = 10;b = 2
a = b + a; //a = 12;b = 2

它的原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。
具体过程:第一句“a=b-a”求出ab两点的距离,并且将其保存在a中;第二句“b=b-a”求出a到原点的距离(b到原点的距离与ab两点距离之差),并且将其保存在b中;第三句“a=b+a”求出b到原点的距离(a到原点距离与ab两点距离之和),并且将其保存在a中。完成交换。

二、位运算

代码如下(示例):

int a = 10, b = 12; //a = 1010, b = 1100; //相同为0,不同为1
a = a ^ b; //a = 1010^1100 = 0110;
b = a ^ b; //b = 0110^1100 = 1010;
a = a ^ b; //a = 0110^1010 = 1100;
//a = 1100. b = 1010;

此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。

此章内容来源于此链接

总结

以上只能进行整形数据的交换(理论上重载“^”运算符,也可以实现任意结构的交换)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值