海亚克钟表学校官网:请问这个两个数交换的原理

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/04 21:57:36
swap(int &a, int &b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
异或好像是基于位的
你们都讲是基于整数的

在深的原理请告知。
谢谢

a = a^b a和b异或的值存入a
b = a^b 这个时候相当于 b=(a^b)^b a 两次异或,相当于自己.
a = a^b 相当于 a = (a^b)^a b两次异或,相当于自己

ab互换了呵呵~

呵呵!^异或

这里的关键是下面的两个性质

1)一个数字和自己的异或的结果是0x0

2)一个数字和0x0异或的结果还是这个数字

下面就是这个的算法:

int swap2(int & a,int & b)

{

a=a^b; // 此时a中已经包含b的“影子”了,同时也有a自己的“影子”

b=a^b; // b和a中自己的“影子”抵消了,所以此时b就是a的初值

a=a^b; // a中a的影子和b(就是a的初始值)抵消,此时a中包含的b的“影子”成为了a的新的值

}