交换两个元素的值,这是件很简单的事情,用一个中间变量temp保存一下其中一个元素的值就OK了.
我们可以这样写:
1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 3, b = 5; 6 int temp = 0; 7 temp = a; 8 a = b; 9 b = temp; 10 return 0; 11 }
如果不使用第三个变量呢,我们可以通过数学的方法利用先求和再求差的方法来交换两个元素的值.
1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 3, b = 5; 6 a = a + b; 7 b = a - b; 8 a = a - b; 9 printf("a = %d, b = %d\n", a, b); 10 return 0; 11 }
但是,用这种方法请注意:这样做是有问题的:当a,b两个数都很大的时候,a = a + b 是有越界的风险的,所以这种方法很明显不是完美的.
那么,有没有一种既不用第三个变量又不会产生越界的方法呢?这个可以有.我们可以用异或(^)的方法来解决这个问题.
异或的运算法则是:相同为0,不同为1, 1 ^ 1 = 0, 1 ^ 0 = 1, 0 ^ 0 = 0, 0 ^ 1 = 1.
假设 a = 3, b = 5. 先让a = a ^ b = 3 ^ 5 = 011 ^ 101 = 110; b = a ^ b = 110 ^ 101 = 011 (3); a = a ^ b = 110 ^ 011 = 101 (5).
这样就实现了a,b的交换.
实现的代码如下:
1 #include <stdio.h> 2 int main() 3 { 4 int a = 3, b = 5; 5 a = a ^ b; 6 b = a ^ b; 7 a = a ^ b; 8 printf("a = %d, b = %d\n", a, b); 9 return 0; 10 }