交换函数多种奇奇怪怪的实现方法

引用来交换

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

发布了78 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43657442/article/details/103777933