Trong bài toán này, chúng ta được cho hai giá trị nguyên A và B. Nhiệm vụ là tìm XOR của hai số mà không sử dụng toán tử XOR.
Ví dụ minh họa
Input: A = 4, B = 5 Output: 1
Phương pháp giải
Một phương pháp để giải quyết bài toán là chuyển đổi các số sang dạng nhị phân và thực hiện các phép toán bitwise dựa trên bảng chân lý XOR.
| A | B | Kết quả |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Chúng ta sẽ sử dụng các phép toán bitwise để thực hiện điều này.
Ví dụ 1: Duyệt qua từng bit
Chương trình minh họa phương pháp duyệt từng bit:
#include <iostream>
using namespace std;
int calcXORwoOperator(int a, int b){
int xorVal = 0;
for (int i = 31; i >= 0; i--){
bool val1 = a & (1 << i);
bool val2 = b & (1 << i);
bool xorBit = (val1 & val2) ? 0 : (val1 | val2);
xorVal <<= 1;
xorVal |= xorBit;
}
return xorVal;
}
int main(){
int a = 4, b = 5;
cout << "XOR của hai số là " << calcXORwoOperator(a, b);
return 0;
}
Kết quả
XOR của hai số là 1
Phương pháp thay thế
Một phương pháp khác để tìm XOR là so sánh các bit của hai số và thực hiện các phép toán tương đương XOR.
Biểu thức (a | b) - (a & b) tương đương với a ^ b. Chúng ta sẽ thực hiện phép toán này để tìm XOR của hai số a và b.
Ví dụ 2: Sử dụng công thức toán học
#include <iostream>
#include <bitset>
using namespace std;
int calcXORwoOperator(int a, int b) {
return (a | b) - (a & b);
}
int main(){
int a = 4;
int b = 5;
cout << "XOR của hai số là " << (bitset<8>(calcXORwoOperator(a, b)));
return 0;
}
Kết quả
XOR của hai số là 00000001