সমস্যা বিবরণ
এই সমস্যায় দুটি পূর্ণসংখ্যা A এবং B দেওয়া হয়েছে। আমাদের কাজ হল XOR অপারেটর ব্যবহার না করে দুটি সংখ্যার XOR বের করা।
উদাহরণ
ইনপুট: A = 4, B = 5 আউটপুট: 1
সমাধানের পদ্ধতি
এই সমস্যা সমাধানের একটি পদ্ধতি হল সংখ্যাগুলিকে বাইনরিতে রূপান্তর করে তারপর বিটওয়াইজ অপারেশন করা। নিচে XOR-এর সত্য তালিকা দেওয়া হলো:
| A | B | আউটপুট |
|---|---|---|
| 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: " << calcXORwoOperator(a, b);
return 0;
}
আউটপুট
সংখ্যাগুলির XOR: 1
পদ্ধতি ২: গাণিতিক ফর্মুলা (a | b) - (a & b)
এক্সপ্রেশন (a | b) - (a & b) একই a ^ b। এটি ব্যবহার করে সহজে XOR বের করা যায়।
#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 << "দুই সংখ্যার XOR: " << bitset<8>(calcXORwoOperator(a, b));
return 0;
}
আউটপুট
দুই সংখ্যার XOR: 00000001