इस समस्या में, हमें दो पूर्णांक मान a और b दिए गए हैं। और हमारा कार्य a से b तक की रेंज का बिटवाइज AND (&) ढूंढना है। इसका मतलब है हमें a & a+1 & a+2 & ... b-1 & b का मान ढूंढना होगा।
उदाहरण
इनपुट - a = 3 , b = 8
आउटपुट - 0
व्याख्या - 3 & 4 & 5 & 6 & 7 & 8 = 0
समस्या को हल करने के लिए, एक सरल समाधान a से शुरू करके b तक एक बढ़ाकर सभी संख्याओं का बिटवाइज AND ढूंढना है।
अधिक प्रभावी समाधान,
यह एक अधिक प्रभावी समाधान है, जिसे निम्न का उपयोग करके किया जा सकता है -
चरण 1 - b के LSB को फ्लिप करें।
चरण 2 - संख्या की तुलना a और b से करें, जांचें कि क्या यह रेंज में है,
चरण 2.1 - यदि संख्या a से बड़ी है तो उसका LSB फिर से फ्लिप करें।
चरण 2.2 - यदि यह a से बड़ा नहीं है तो संख्या = परिणाम।
अब, आइए उपरोक्त एल्गोरिदम को कार्य करते हुए देखें -
उदाहरण - a = 3 और b = 8।
समाधान -
चरण 1 - b = 8 (1000), LSB फ्लिप करना जो संख्या में एकमात्र है। संख्या 0000 यानी 0 हो जाती है।
चरण 2 - 0, 3 से कम है, 0 परिणाम है।
कार्यक्रम उदाहरण
#include <stdio.h>
int main(){
long a, b;
a = 3; b = 8;
do{
b -= (b & -b);
}while(a < b);
printf("%li", b);
}
आउटपुट
0