引用来交换
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
指针来交换
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
加法来交换
void swap(int& a, int& b) {
a = a + b;
b = a - b;
a = a - b;
}
异或来交换,相同的数异或为0,任何数与0异或等于它自己
void swap(int& a, int& b) {
a = a xor b;
b = a xor b; //等价于b= a xor b xor b; 即把a的值赋值给b
a = a xor b; //现在的b的值是一开始的a的值了,等价于b= a xor b xor a;最后一个a其实是上一句代码执行后b的值,即把b的值赋值给a
}
其实二进制的加法和异或是一样的11得0,00得0,01、10得1。比如这篇
二进制字符串的求和 :https://blog.csdn.net/qq_43657442/article/details/103710414