इस खंड में हम देखेंगे कि बाइनरी स्ट्रिंग पर एक्सओआर ऑपरेशन का उपयोग करके हम 2 के पूरक को कैसे ढूंढ सकते हैं। 2 का पूरक वास्तव में 1 का पूरक + 1 है। हम 1 का पूरक प्राप्त करने के लिए XOR ऑपरेशन का उपयोग करेंगे।
हम LSb से स्ट्रिंग को पार करेंगे, और 0 की तलाश करेंगे। हम सभी 1 को 0 पर तब तक फ़्लिप करेंगे जब तक हमें 0 नहीं मिल जाता। फिर पाए गए 0 को फ़्लिप करें।
हम एलएसबी से आगे बढ़ेंगे। फिर 1 प्राप्त करने तक सभी 0 को अनदेखा करते हुए। पहले 1 को अनदेखा करते हुए, हम XOR ऑपरेशन का उपयोग करके सभी बिट्स को टॉगल करेंगे।
एल्गोरिदम
get2sComp(bin)
begin len := length of the binary string flag := false for i := len-1 down to 0, do if bin[i] is 0, and flag is not set, then ignore the next part, jump to next iteration else if flag is set, then bin[i] := flip of bin[i] end if flag := true end if done if the flag is not set, then attach 1 with bin and return else return bin end if end
उदाहरण
#include <iostream> using namespace std; string get2sComplement(string bin) { int n = bin.length(); bool flag = false; //flag is used if 1 is seen for (int i = n - 1; i >= 0; i--) { //traverse from last bit if (bin[i] == '0' && !flag) { continue; } else { if (flag) bin[i] = (bin[i] - '0') ^ 1 + '0'; //flip bit using XOR, then convert to ASCII flag = true; } } if (!flag) //if no 1 is there, just insert 1 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); }
आउटपुट
Enter a binary string: 10110110 2's complement of 10110110 is 01001010