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