读书人

请问-用按位 异或来交换数原理是什么

发布时间: 2012-05-11 12:55:37 作者: rapoo

请教-用按位 异或来交换数原理是什么
用按位 异或来交换数原理是什么
比如,
int x=7,y=8;
x=x^y;
y=y^x;
x=x^y;
结果x=8,y=7;


[解决办法]
首先要明白3点:
1.任何数 ^ 任何数 = 0
2.任何数 ^ 0 = 任何数
3.异或满足交换率和结合律。就是 (a^b)^c = a^(b^c) = (a^c)^b

现在有x,y 两个数

C/C++ code
int a=A,b=B; //这里将a,b的原始值表示为 a=A,b=Ba=a^b;   //将a,b的值A,B带入式子,  a = a^b = A^B b=a^b;   //将a,b的值带入式子       b = a^b = (A^B) ^B = A^(B^B) = A^0 = A;a=a^b;   //将a,b的值带入式子       a = a^b = (A^B) ^A = (A^A)^B = 0^B = B;//所以不管a,b为何值,经过上面3步,都能实现ab的交换 

读书人网 >C++

热点推荐