এই বিভাগে আমরা দেখব কীভাবে বাইনারি স্ট্রিংয়ের ২'র কমপ্লিমেন্ট XOR অপারেশন দিয়ে বের করা যায়। ২'র কমপ্লิมেন্ট আসলে ১'র কমপ্লিমেন্ট + ১। আমরা XOR অপারেশন ব্যবহার করে ১'র কমপ্লিমেন্ট বের করব।
আমরা LSB (লিস্ট সিগনিফিক্যান্ট বিট) থেকে ট্রাভার্স করব এবং ০ খুঁজব। প্রথম ০ পাওয়া পর্যন্ত সব ১ কে ০ করব। তারপর সেই ০ কে ফ্লিপ করব।
আমরা LSB থেকে ট্রাভার্স করব। প্রথম ১ পাওয়া পর্যন্ত সব ০ কে উপেক্ষা করব। প্রথম ১ কে উপেক্ষা করে বাকি সব বিট XOR অপারেশন দিয়ে টগল করব।
অ্যালগরিদম
get2sComp(bin)
শুরু
len := বাইনারি স্ট্রিংয়ের দৈর্ঘ্য
flag := false
i := len-1 থেকে 0 পর্যন্ত কমতে কমতে লুপ
যদি bin[i] == '0' এবং flag সেট না থাকে, তবে
পরবর্তী ইটারেশনে যান
অন্যথায়
যদি flag সেট থাকে, তবে
bin[i] := bin[i] এর ফ্লিপ
(flag := true)
লুপ শেষ
যদি flag সেট না থাকে, তবে
bin-এর সাথে ১ যোগ করে রিটার্ন করুন
অন্যথায়
bin রিটার্ন করুন
শেষ
উদাহরণ কোড
#include <iostream>
using namespace std;
string get2sComplement(string bin) {
int n = bin.length();
bool flag = false;
for (int i = n - 1; i >= 0; i--) {
if (bin[i] == '0' && !flag) {
continue;
} else {
if (flag)
bin[i] = (bin[i] - '0') ^ 1 + '0';
flag = true;
}
}
if (!flag)
return "1" + bin;
else
return bin;
}
int main() {
string str;
cout << "Enter a binary string: ";
cin >> str;
cout << "2's complement of " << str << " is " << get2sComplement(str);
return 0;
}
আউটপুট
Enter a binary string: 10110110 2's complement of 10110110 is 01001010