首页 > 代码库 > 交换a,b两个元素的值
交换a,b两个元素的值
交换两个元素的值,这是件很简单的事情,用一个中间变量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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。