इस समस्या में, हमें दो संख्याएं दी गई हैं। हमारा कार्य दो पूर्णांकों के बिटवाइज पुनरावर्ती योग के लिए एक C प्रोग्राम बनाना है।
बिटवाइज ऑपरेशन का उपयोग करके योग ढूंढने का तर्क उस चीज़ के समान है जो हम प्रीस्कूल में करते थे। योग ढूंढने के लिए, हम संख्या के प्रत्येक अंक को जोड़ते थे और यदि कैरी होती है, तो हम इसे अगले अंक में जोड़ते हैं।
हम एक समान चीज़ करेंगे, XOR ऑपरेटर का उपयोग करके योग ढूंढेंगे और AND ऑपरेशन का उपयोग करके कैरी की जांच करेंगे। यदि कैरी है तो हम इसे वापस संख्या में जोड़ देंगे अन्यथा नहीं।
यह एक हाफ-एडर का तर्क है जिसे आपने डिजिटल इलेक्ट्रॉनिक्स में सीखा होगा। यहां देखें...
अब, योग की गणना a^b यानी a XOR b का उपयोग करके की जाती है और हमें एक अतिरिक्त कैरी की जांच करने की आवश्यकता होती है जिसे प्रसारित करने की आवश्यकता होती है यदि दोनों का पहला बिट सेट है या ऐसा ही। और हमें संख्या में एक अतिरिक्त सेट बिट जोड़ने की आवश्यकता होती है।
तो, एक बिट एल्गोरिदम होगा
चरण 1 - a और b का XOR ढूंढें यानी a^b और इसे परिणाम चर में संग्रहीत करें।
चरण 2 - जांचें कि क्या {(a & b) << 1} == 0
चरण 2.1 - यदि यह 0 के बराबर है, तो परिणाम प्रिंट करें, यह अंतिम परिणाम है।
चरण 2.2 - यदि यह 0 के बराबर नहीं है, तो चरण 1 पर जाएं, a = {(a & b) << 1} और b = परिणाम के साथ।
उदाहरण
एल्गोरिदम के कामकाज को स्पष्ट करने के लिए प्रोग्राम:
#include <stdio.h> int addNumbers(int a, int b) { int carry = (a & b) << 1; int result = a ^ b; if (carry == 0) return result; else return addNumbers(carry, result); } int main(){ int a = 54, b = 897; printf("बिटवाइज जोड़ का उपयोग करके %d और %d का योग %d है", a, b, addNumbers(a, b)); return 0; } आउटपुट
बिटवाइज जोड़ का उपयोग करके 54 और 897 का योग 951 है