从刚开始接触 cpp 大家都会学习的一个东西就是如何交换两个变量的值,一般要新设置一个变量来储存中间值,然后进行赋值运算。下面要介绍的方法可以省去新建一个变量的空间,使用的位运算还可以提高效率。
#include<iostream>
using namespace std;
void swap(int &a,int &b){
a ^= b;
b ^= a;
a ^= b;
}
int main(){
int m = 1;
int n = 2;
swap(m, n);
cout << m << " " << n << endl;
}
这里的'^'就是异或运算符⊕。
首先让a = a ⊕ b。
b = b ⊕ a,那么 b = b ⊕ a = b ⊕ a ⊕ b,所以b = a。
最后,a = a ⊕ b,那么 a = a ⊕ b = a ⊕ b ⊕ a = b。
至此,完成了 a 和 b 的交换。
但是,存在的一个问题就是,不能让自己和自己进行交换,即:
swap(a,a);
因为:
a = a^a = 0;
a = a^a = 0;
a = a^a = 0;
这样会使得这个数变成0。
因此遇到会让单个元素自己与自己进行交换的情况下,例如快排算法的时候,还是老老实实用传统方法比较合适。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。