इस समस्या में, हमें दो नंबर M और N दिए गए हैं। हमारा काम दो नंबरों के सबसे दाहिने सामान्य बिट की स्थिति (इंडेक्स) को प्रिंट करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट - एन =4 , एम =7
आउटपुट -3
स्पष्टीकरण -(4)2 =100 , (7)2 =111। सबसे सही सामान्य बिट इंडेक्स 3 पर है।
इस समस्या को हल करने के लिए, हमें संख्याओं के सभी समान बिट्स को खोजना होगा। सभी समान बिट्स को खोजने के लिए हमें M और N का xor मिलेगा। फिर हम M^N के निषेध में सबसे सही बिट पाएंगे।
यह समझने में थोड़ा जटिल लगता है, आइए इस पद्धति का उपयोग करके एक उदाहरण को हल करें।
N = 4 , M = 7 ~N^M = 100.
यहां सबसे दाहिना सेट बिट इंडेक्स 3 पर है।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
#include <iostream>
#include <math.h>
using namespace std;
int rightSetBit(int N) {
int bitIndex = log2(N & -N)+1;
return bitIndex;
}
void rightSameBit(int m, int n) {
int diffBit = rightSetBit(~(m^n));
cout<<diffBit;
}
int main() {
int N = 4, M = 7;
cout<<"Postiion of first right same bit of the number "<<N<<" & "<<M<<" is ";
rightSameBit(N, M);
return 0;
} आउटपुट
Postiion of first right same bit of the number 4 & 7 is 3