दिए गए प्रॉब्लम में, हमें किसी संख्या के दिए गए इंडेक्स के बिट को अपडेट करना है। संख्या को अपडेट करने के लिए, हम दी गई संख्या पर बिट मैनिपुलेशन ऑपरेशन का उपयोग कर सकते हैं। उदाहरण के लिए,
इनपुट-1 -
N = 25, बिट = 1, पोजीशन = 2
आउटपुट -
29
व्याख्या - चूंकि दिया गया इनपुट 25 को बाइनरी में '11001' के रूप में लिखा जा सकता है, जबकि पोजीशन इंडेक्स '2' है और बिट '1' है। दिए गए पोजीशन पर डिजिट को बदलने के बाद आउटपुट '11101' होगा जो '29' के बराबर है।
इस प्रॉब्लम को हल करने का दृष्टिकोण
किसी संख्या के दिए गए पोजीशन या इंडेक्स पर, इनपुट में दिए गए विशेष बिट के साथ बिट को अपडेट करने का कार्य है। दिए गए पोजीशन पर बिट को अपडेट करने का दृष्टिकोण पहले उस पोजीशन पर बिट को क्लियर करना है और फिर बाइनरी AND ऑपरेशन करके बिट को अपडेट करना है।
एक संख्या N, अपडेट करने के लिए बिट 'बिट' के रूप में, और उस पोजीशन या इंडेक्स को इनपुट के रूप में लें जिस पर हमें बिट को अपडेट करना है 'पोजीशन' के रूप में।
एक वॉइड फंक्शन updateBit(int &n, int bit, int position) करंट बिट का एड्रेस, बिट वैल्यू और बिट का इंडेक्स लेता है। फंक्शन दिए गए बिट से बदलकर संख्या का अपडेटेड मान प्रिंट करेगा।
दिए गए पोजीशन पर बिट को क्लियर करें और परिणामी बिट को रिजल्ट में जोड़ें।
एक मास्क बनाएं और रिजल्ट के साथ AND ऑपरेशन करें।
हमारे द्वारा बनाए गए मास्क के साथ बाइनरी OR ऑपरेशन करें और इंडेक्स पर अपडेट किए जाने वाले वैल्यू के साथ राइट शिफ्ट ऑपरेशन करें।
उदाहरण
#include <iostream>
using namespace std;
void updateBit(int &n, int bit, int pos) {
int clearBit = ~(1 << pos);
int mask = n & clearBit;
n = mask | (bit << pos);
}
int main() {
int n = 25;
int bit = 1;
int pos = 2;
updateBit(n, bit, pos);
cout << n;
}
आउटपुट
उपरोक्त कोड चलाने पर निम्न आउटपुट उत्पन्न होगा,
29
चूंकि इनपुट 25 है जो बाइनरी प्रतिनिधित्व में 11001 है। पोजीशन '2' को '1' से बदलने के बाद, यह बाइनरी में 11101 बन जाएगा जो 29 है।