设变量 a = 1, b = 2, 我们要交换两个变量的值, 当用异或交换两个值的时候会有一个小问题
用位运算大概是这个样子的
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 void swap(int& a, int &b) { 6 a ^= b; 7 b ^= a; 8 a ^= b; 9 } 10 11 int main() { 12 int a = 2, b = 3; 13 cout << "before swap a = " << a << " b = " << b << endl; 14 swap(a, b); 15 cout << "after swap a = " << a << " b = " << b << endl; 16 return 0; 17 }
能够正确交换两个变量的值, 但是我们有时候往往交换的是数组中的两个值, a[i] 和 a[j]
当i ==j的时候调用就会出错, 因为两个参数对应同一个引用, 而一个数和自己异或是0, 则a[i]就被赋值为0了, 其它的信息就找不会来了, 就出现了错误!
改正的办法还得加一个中间变量:
1 void swap(int& a, int &b) { 2 int c = a ^ b; 3 b = c ^ b; 4 a = c ^ a; 5 }
那这样就不如直接拿中间变量赋值了, 不用做异或了
时间: 2024-10-25 10:52:22