C语言异或预算符

来源:百度知道 编辑:UC知道 时间:2024/05/21 22:52:37
# include "iostream.h"
void main(){
int a=1,b=2;
a=b^a;
b=a^b;
a=a^b;
cout<<a<<endl;
cout<<b<<endl;
}以上程序能够交换a和b的值,请高手解释一下那关键的三行代码!!!
怎么就那么巧妙呢

异或运算符运算法则是:对应位相同时为0,相异时为1.例如:1^1=0,1^0=1.
求异或时要先把相应的10进制数转换为二进制数,再求。其他逻辑运算符一样。
1的二进制为1,2的二进制位10,所以b^a为:
10
^01
-----
11
得到此处a=3,下一步b^a中的a即为3(下面类似)
a^b:
11
^10
-----
01
得到b=1
a^b:
11
^01
-----
10
得a=2
如此就实现了交换a,b值的目的。

(1)a=b^a;
(2)b=a^b;
(3)a=a^b;

把(1)代入(2),即 b = b^a^b = b^b^a = 0^a = a ----(4)
把(1)和(4)代入(3)的右边,即 a = b^a^a = b^(a^a) = b^0 =b (此b非(4)的b,是原来的b)