使用异或运算符实现两个数交换原理

可以使用异或运算符实现两个数交换

#include <iostream>
using namespace std;
int main(){
    int a = 4, b = 5;
    cout<<a<<" "<<b<<endl;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    cout<<a<<" "<<b<<endl;  
    return 0;
} 
4 5
5 4

异或运算符,两个输入相同时为0,不同则为1。

#include <iostream>
using namespace std;
int main(){
    cout<<(1^1)<<endl;
    cout<<(1^0)<<endl;
    cout<<(0^1)<<endl;
    cout<<(0^0)<<endl;
    return 0;
}

输出 0 1 1 0

为什么异或运算符可以实现两数交换?

其实原理和不用新的变量实现两数交换类似。

#include <iostream>
using namespace std;
int main(){
    int a = 4, b = 5;
    cout<<a<<" "<<b<<endl;
    a = a + b;
    b = a - b;
    a = a - b;
    cout<<a<<" "<<b<<endl;  
    return 0;
} 

首先a变量作为两数之和

其次让b变为原本a的值。

最后让a变为原本b的值。

其中第二步的时候 b = a + b - b,所以结果为a

其中第三部的时候 a = a + b - b, 所以结果为b

再来看异或运算符实现两数交换的代码。

a = a ^ b;
b = a ^ b;
a = a ^ b;

异或有这样的性质: a ^ a = 0

其中第二步的时候b = a ^ b ^b ,所以结果为a

其中第三步的时候a = a ^ b ^ a,所以结果是b

所以就实现了两数交换。

Last modification:December 21st, 2019 at 04:38 am
如果觉得我的文章对你有用,请随意赞赏