只用两个数实现交换
程序:
int a,b;
(1) a=a^b;
(2) b=a^b;
(3) a=a^b;
这样就实现了两个数的交换:
关于 ^ 相同为0 ,不同为1 异或运算满足交换律
(1) 中 a和b的二进制位相同的就变成0,不同的就变为1;
(2) 中 a^b 就相当于 开始的 a^b^b得到的结果是 a:
讨论: 共有4种情况(就某一位来说):
(a,b)={ (1,1),(1,0),(0,1),(0,0) };
a^b={0,1,1, 0};
a^b^b=(1,1,0,0); 和a的位数一样 ==a;
(3)a=a^b^a;===b
实现了交换。
还有一种方法是
a=a+b;
b=a-b;
a=a-b;
只是有溢出的可能。