C++ में बिट ऑपरेशन: बिट कैसे सेट करें, रीसेट करें और टॉगल करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में बिट ऑपरेशन: एक बिट कैसे सेट करें, रीसेट करें और टॉगल करें (और पागल न हों)

\n\n

नमस्ते, साथी! यदि आपने कभी C++ में किसी और का कोड देखा हो और |, & और ~ जैसे अजीब प्रतीक देखे हों, और फिर सोचा हो "वे ऐसा क्यों कर रहे हैं?" — तो आप सही जगह पर हैं। आज हम प्रोग्रामिंग के सबसे लोकप्रिय (और, ईमानदारी से, सबसे सुरुचिपूर्ण) विषयों में से एक को समझेंगे: बिट ऑपरेशन। विशेष रूप से — एक बिट को कैसे सेट करें, रीसेट करें और टॉगल करें।

\n\n

यह केवल एक शैक्षणिक अभ्यास नहीं है। बिट्स के साथ काम करना एक सुपरपावर है जो आपके काम आएगी: कॉन्फ़िगरेशन फ्लैग और माइक्रोकंट्रोलर पेरिफेरल्स के साथ काम करने से लेकर गेम या डेटाबेस में डेटा स्टोरेज को ऑप्टिमाइज़ करने तक। Stack Overflow पर इस प्रश्न को सैकड़ों हज़ारों बार देखा गया है — इसका मतलब है कि यह वास्तव में महत्वपूर्ण है।

\n\n

चलिए उबाऊ सिद्धांत के बिना — सीधे मुद्दे पर आते हैं। चलिए शुरू करते हैं!

\n\n

हम बिट्स के साथ क्यों काम करते हैं?

\n\n

कल्पना करें कि आपके पास 8 अलग-अलग सेटिंग्स हैं (जैसे, ध्वनि चालू करें, टिप्स दिखाएं, नाइट मोड चालू करें, आदि)। आप उन्हें आठ अलग-अलग bool प्रकार के वेरिएबल में स्टोर कर सकते हैं। लेकिन यह 8 बाइट्स (या उससे अधिक) है। जबकि आप एक बाइट का उपयोग कर सकते हैं — 8 बिट, जिनमें से प्रत्येक अपनी सेटिंग के लिए जिम्मेदार है। मेमोरी में 8 गुना बचत — और यह केवल शुरुआत है।

\n\n

बिट ऑपरेशन एक निम्न-स्तरीय जादू है जो अविश्वसनीय रूप से तेज़ी से काम करता है। प्रोसेसर उन्हें एक क्लॉक साइकिल में निष्पादित करता है। एम्बेडेड सिस्टम, ड्राइवर और उच्च-लोड अनुप्रयोगों के लिए यह महत्वपूर्ण है।

\n\n

C++ में बिट्स के साथ काम करने के लिए तीन मुख्य ऑपरेटरों का उपयोग किया जाता है:

\n
    \n
  • | (बिटवाइज़ OR) — बिट को सेट करने के लिए।
  • \n
  • & (बिटवाइज़ AND) — बिट को रीसेट करने के लिए।
  • \n
  • ^ (बिटवाइज़ एक्सक्लूसिव OR, XOR) — बिट को टॉगल करने के लिए।
  • \n
\n\n

और एक और उपयोगी ऑपरेटर — ~ (बिटवाइज़ NOT), जो सभी बिट्स को उलट देता है। रीसेट करने के लिए हमें इसकी आवश्यकता होगी।

\n\n

बिट नंबरिंग: चलिए अभी सहमत हो जाते हैं

\n\n

प्रोग्रामिंग में, बिट्स को शून्य से नंबर करने की प्रथा है। सबसे कम महत्वपूर्ण बिट (Least Significant Bit, LSB) बिट 0 है। सबसे अधिक महत्वपूर्ण बिट (Most Significant Bit, MSB) बाइट के लिए बिट 7, शब्द (16 बिट) के लिए 15, आदि है।

\n\n

इस लेख में हम स्पष्टता के लिए uint8_t (8-बिट अहस्ताक्षरित पूर्णांक) का उपयोग करेंगे। लेकिन सभी उदाहरण int, unsigned int, uint32_t और किसी भी अन्य पूर्णांक प्रकार के साथ काम करते हैं।

\n\n

बिट कैसे सेट करें (Set bit)

\n\n

बिट सेट करने का मतलब है इसे 1 के बराबर बनाना, भले ही यह पहले कुछ भी रहा हो।

\n\n

सबसे सरल तरीका मास्क के साथ बिटवाइज़ OR का उपयोग करना है। मास्क एक संख्या है जिसमें केवल वह बिट सेट होता है जिसे हम बदलना चाहते हैं।

\n\n

सूत्र:

\n
संख्या |= (1 << बिट_नंबर);
\n\n

चरण दर चरण समझते हैं:

\n
    \n
  1. 1 << बिट_नंबर — 1 को आवश्यक स्थानों पर बाईं ओर शिफ्ट करें। यदि बिट नंबर = 3 है, तो 1 << 3 बाइनरी 00001000 देता है।
  2. \n
  3. संख्या | मास्क — OR ऑपरेशन बिट को 1 पर सेट करेगा यदि वह 0 था, और यदि वह पहले से 1 था तो 1 ही रखेगा।
  4. \n
\n\n

C++ कोड उदाहरण:

\n
#include <iostream>\n#include <cstdint>\n\nint main() {\n    uint8_t flags = 0b00000000;  // शुरू में सभी बिट रीसेट हैं\n\n    // तीसरा बिट सेट करें (शून्य से गिनती)\n    flags |= (1 << 3);\n\n    // अब flags = 0b00001000\n    std::cout << "बिट 3 सेट करने के बाद: " << static_cast<int>(flags) << std::endl;\n\n    // 0वां बिट सेट करें\n    flags |= (1 << 0);\n    // flags = 0b00001001\n    std::cout << "बिट 0 सेट करने के बाद: " << static_cast<int>                

ब्लॉग

पुस्तक अनुशंसाएँ