一、中间临时变量法
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
二、异或法交换变量
在计算机刚发明时,内存非常“精贵”。这种变量交换往往是非常奢侈的。于是计算机“大牛”发明了一些算法来避免使用中间变量:
void swap(int &a, int &b) {
a = a ^ b; // 充当临时变量
b = b ^ a; // <=> b = b ^(a ^ b) = a ^ b ^ b, 因为b ^ b = 0,所以 a ^ b ^ b = a ^ 0 = a
a = b ^ a; // <=> a = a ^ (a ^ b) = a ^ a ^ b, 因为a ^ a = 0, 所以 a ^ a ^ b = 0 ^ b = b
}
原理:分析异或二进制计算结果:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 1 = 0
1 ^ 0 = 1
由此得出规律:
1、一个数异或自身,得0, 如 x ^ x = 0
2、一个数异或0, 得自身, 如 x ^ 0 = x
3、一个数异或另一个数两次,得自身, 如 x ^ y ^ y = x ^ 0 = x
三、go 语言中支持多重赋值
a,b = b,a