从刚开始接触 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。
因此遇到会让单个元素自己与自己进行交换的情况下,例如快排算法的时候,还是老老实实用传统方法比较合适。


sebastian_fcs
1 声望0 粉丝