您的位置:首页 > 其它

不使用 临时变量交换两个变量的值(SWAP)【原理分析】

2013-05-23 21:36 435 查看
前不久看到CSDN上有位兄台发了篇文章,说不不使用 临时变量交换两个变量的值,实现一个SWAP函数。

那位兄台原文里说是针对int整形数的交换。

实现函数如下:

void deep_swap(int *x,int *y)

{

*x = *x ^ *y;

*y = *x ^ *y;

*x = *x ^ *y;

}

其文章里并没有说明实现的原理,这里我来说下原理。

其实这个交换函数,用C++中的模板函数来实现的话,针对哪种类型的数据都是可以的。都可以实现数据交换,不仅仅是整型。

因为这个是二进制的深层次的交换。不管是什么类型,只要二进制是一样的,那呈现出来的数据也是一样的吧。

原理如下:

其实原理很简单:

约定:

我们用 X 来表示上面 函数提到的 *x ;

我们用 Y 来表示上面 函数提到的 *y ;


用 Xr 来表示,最后交换的 *x 的值;

用 Yr 来表示,最后交换的 *y 的值;

假定:

X : 110101

Y: 011010

第一行执行结果:

第二行执行结果,其实是:

(Yr =110101 ^ 011010 ^ 011010 )

= X^Y^Y = X^(Y^Y) = X^0

= X;

第三行执行结果其实是:

(Xr = 110101 ^ 011010^ 110101 ^ 011010 ^ 011010 )

=( X^Y ) ^ (X^ (Y^Y) )

= X^Y ^ X^ 0

= Y (X^X) ^ 0

= Y;

这里其实用到了3个概念:

1. 就是两个 相等的数 异或的结果是 0;

2. 任何一个数 与 0 异或 ,结果就是这个数;

3. 奇数个相等的数异或,结果还是这个数;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: