交换值的三种方法
吐槽
今天做题时又碰到了两个数交换位置的情况,当我使用C++的时候可以选择使用swap()函数,一劳永逸。但是当我用Java时,老是得自己手动写函数来交换两者的位置,还有一点就是,对于基本类型,函数的参数列表是传值的,无法进行位置的交换,所以多数时候基本没法单独写一个函数模块,所以必须要把这段无趣的代码写在代码逻辑内部,我写了三种交换两个位置的方法(其实华而不实,但还是默默记下。。。)。
方法一(常用)
使用中间变量
代码一
void swap(int a,int b){
// a = 1,b = 2;
int temp = a;
a = b;
b = temp;
// a = 2,b = 1;
return ;
}
方法二
存在溢出风险
代码二
void swap(int a,int b){
// a = a0,b = b0;
a = a + b; // 结束状态 a = a0 + b0,b = b0;存在溢出风险
b = a - b; // 结束状态 a = a0 + b0,b = a0;
a = a - b; // 结束状态 a = b0,b = a0;
// a = b0,b = a0;
return ;
}
方法三
异或的特性:x ^ 1 = ~x,x ^ 0 = x,x ^ x = 0。
代码三
void swap(int a,int b){
// a = a0,b = b0;
a = a ^ b; // 结束状态 a = a0 ^ b0,b = b0;
b = a ^ b; // 结束状态 a = a0 ^ b0,b = (a0 ^ b0) ^ b0 = a0;
a = a ^ b; // 结束状态 a = (a0 ^ b0) ^ a0 = b0,b = a0;
// a = b0,a = a0;
return ;
}