使用异或运算符实现两个数交换原理
可以使用异或运算符实现两个数交换
#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
所以就实现了两数交换。