交换两个变量,是一个极其常见的问题,今天我们介绍三个常见的方法。如果还有其他的好的方法,欢迎大家评论区补充。
一、三杯水交换
这是最常见的一种方法,具体实现如下。
int a = 5;
int b = 10;
int c = 0;
c = a;
a = b;
b = c;
如果要求不新增变量,该怎么办呢?
二、使用加减法运算进行交换
int a = 5;
int b = 10;
a = a + b; //a = 5 + 10 = 15
b = a - b; //b = (5 + 10) - 10 = 5 = a
a = a - b; //a = (5 + 10) - 5 = 10 = b
但是这种方法也有缺陷,那就是如果a和b太大时,可能发生溢出现象,导致交换失败
那么还有没有其他的方法呢?
三、使用异或运算进行交换
首先介绍异或的三个特点:
1.两个相同的值异或,结果为0;
2.0与任何值异或,结果为任何值;
3.异或与顺序无关;
demo:6^5^7^6^7 = 5
int a = 5;
int b = 10;
a = a ^ b;
b = a ^ b; //a ^ b ^ b
a = a ^ b; //a ^ b ^ a
这种方法虽然不用考虑溢出问题,但是一般只适用于整数的交换
总结
各种方法都有利弊,在使用的时候还要结合实际情况来使用。大家如果还有别的想法,欢迎在评论区留言。