ในปัญหานี้ เราได้รับค่าจำนวนเต็ม A และ B งานของเราคือการหา XOR ของสองตัวเลขโดยไม่ใช้ตัวดำเนินการ XOR
ตัวอย่างเพื่อเข้าใจปัญหา
Input: A = 4, B = 5 Output: 1
วิธีการแก้ปัญหา
วิธีหนึ่งคือการแปลงตัวเลขเป็นเลขฐานสอง จากนั้นดำเนินการบิตตามตารางความจริงของ XOR
| A | B | Output |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
วิธีที่ 1: ใช้ลูปตรวจสอบบิตแต่ละตำแหน่ง
#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 of the numbers is " << calcXORwoOperator(a, b);
return 0;
}
วิธีที่ 2: ใช้สูตรทางคณิตศาสตร์ (a | b) - (a & b)
นิพจน์ (a | b) - (a & b) เทียบเท่ากับ a ^ b
#include <iostream>
#include <bitset>
using namespace std;
int calcXORwoOperator(int a, int b) {
return (a | b) - (a & b);
}
int main() {
int a = 4, b = 5;
cout << "The XOR of both numbers is " << bitset<8>(calcXORwoOperator(a, b));
return 0;
}
ผลลัพธ์
XOR of the numbers is 1 The XOR of both numbers is 00000001