इस खंड में हम देखेंगे कि बाइनरी स्ट्रिंग पर XOR ऑपरेशन का उपयोग करके 2's पूरक कैसे ज्ञात किया जा सकता है। 2's पूरक वास्तव में 1's पूरक + 1 होता है। हम 1's पूरक प्राप्त करने के लिए XOR ऑपरेशन का उपयोग करेंगे।
हम LSB से स्ट्रिंग को पार करेंगे और 0 ढूंढेंगे। हम सभी 1's को 0 में तब तक फ्लिप करेंगे जब तक हमें 0 नहीं मिल जाता। फिर मिले हुए 0 को फ्लिप करेंगे।
हम LSB से पार करेंगे। फिर सभी 0's को तब तक अनदेखा करेंगे जब तक हमें 1 नहीं मिल जाता। पहले 1 को अनदेखा करके, हम XOR ऑपरेशन का उपयोग करके सभी बिट्स को टॉगल करेंगे।
एल्गोरिदम
get2sComp(bin)
begin
len := बाइनरी स्ट्रिंग की लंबाई
flag := false
for i := len-1 down to 0, do
if bin[i] 0 है और flag सेट नहीं है, then
अगले भाग को अनदेखा करें, अगले इटरेशन पर जाएं
else
if flag सेट है, then
bin[i] := bin[i] का फ्लिप
end if
flag := true
end if
done
यदि flag सेट नहीं है, then
bin के साथ 1 जोड़ें और लौटाएं
else
bin लौटाएं
end if
end
उदाहरण
#include <iostream>
using namespace std;
string get2sComplement(string bin) {
int n = bin.length();
bool flag = false; // flag का उपयोग तब किया जाता है जब 1 देखा जाता है
for (int i = n - 1; i >= 0; i--) { // अंतिम बिट से पार करें
if (bin[i] == '0' && !flag) {
continue;
} else {
if (flag)
bin[i] = (bin[i] - '0') ^ 1 + '0'; // XOR का उपयोग करके बिट फ्लिप करें, फिर ASCII में बदलें
flag = true;
}
}
if (!flag) // यदि कोई 1 नहीं है, तो बस 1 डालें
return "1" + bin;
else
return bin;
}
int main() {
string str;
cout << "एक बाइनरी स्ट्रिंग दर्ज करें: ";
cin >> str;
cout << "2's complement of " << str << " is " << get2sComplement(str);
return 0;
}
आउटपुट
एक बाइनरी स्ट्रिंग दर्ज करें: 10110110 2's complement of 10110110 is 01001010