异或运算实现两个数的交换

来源:互联网 发布:好听淘宝名字大全 编辑:程序博客网 时间:2024/06/11 07:46
通常的交换两个变量a,b的过程为int temp;temp=aa=b;b=temp;需借助上面的第3个临时变量temp.采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:    a = a ^ b;    b = a ^ b;    a = a ^ b;这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质:1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=02.任意一个变量X与0进行异或运算,结果不变,即X^0=X3.异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)4.异或运算具有可交换性,即a^b=b^a分析:第一步:    a = a ^ b;完成后 a变量的结果为a ^ b第二步:    b = a ^ b;此时赋值号右边的a保存的是a ^ b的值,那么将赋值号右边的aa ^ b替换,得到(a ^ b) ^ b=a ^ (b ^ b)=a ^0=a,即经过第二步运算后b中的值为a,即b=a,将a换到了b里第三步:    a = a ^ b;此时赋值号右边的a保存的仍然是a ^ b的值,不变,而赋值号右边的b已经是a 了,将赋值号右边的a,b分别进行替换,即此时赋值号右边a ^ b=(a ^ b)^ a=a ^ b^ a=a ^ a^ b=0^ b=b, 该值赋值给a,即a=b即经过第三步运算后a中的值为b,即a=b,将b换到了a里这样经过如上的三步骤,完成了交换两个变量a,b而无需借助第3个临时变量过程。这个过程等价于如下的过程,:a=a+bb=a-b;a=a-b;前提是a+b的值不能溢出。测试程序如下:int main(){    int a = 4, b = 5;    printf("a=%d b=%d\n", a, b);    a = a ^ b;    b = a ^ b;    a = a ^ b;    printf("a=%d b=%d\n", a, b);}运行结果:[root@test cs]# ./a.outa=4 b=5a=5 b=4[ 注意:当a和b相等时,该方法不适用]
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 武汉火车站到汉口火车站 武汉高铁站在武昌还是汉口 汉考克为什么不和女超人一起 汉和防务评论 赵合德和汉成帝肉 汉米尔顿和天梭哪个好 汉唐归来 重回汉唐 汉唐风月 汉唐 赵汉唐 汉唐婚礼 汉唐中医 汉唐咨询 汉唐文化 汉唐公司 汉唐汽车 汉唐网 汉唐电动车 汉唐舞 汉唐风格 汉唐服饰 汉唐家具 汉唐舞蹈 汉唐生物 汉唐金足 汉唐天下 汉唐传媒 汉唐科技 汉唐面庄 汉唐集团 汉唐小馆 汉唐威龙酒 汉唐防潮柜 第一重装汉唐风月 汉唐电动汽车 汉唐风月1作品 汉唐风月作品 重回汉唐汉服 汉风1918汉唐归来唯有中华 汉风1918汉唐归来