BitFields in C: यदि किसी Program में किसी Variable को केवल दो में से एक मान 0 या 1 Store करने होते हैं, तो हमें इन दोनों मानों को Store करने के लिए केवल एक Bit की जरूरत होती है। इसी तरह से यदि किसी Variable को चार मानों में से केवल एक मान ही Store करना हो, तो हमें केवल दो Bits की जरूरत होती है और यदि किसी Variable को आठ में से केवल एक मान Store करना हो, तो फिर इस जरूरत को केवल 3 Bits का प्रयोग करके पूरा किया जा सकता है।
जब हमारा काम Bits से हो सकता है, तो फिर इनके लिए पूरे Integers प्रकार के 2 Byte ( 16 Bits ) को क्यों Use किया जाए?
लेकिन “C” मे कोई भी ऐसा Data Type नहीं है जो Bits पर काम करता हो। फिर भी जब ऐसे कई Variables हों, जो पूरा Byte Use ना करते हों, तो उन्हे मिला कर एक ही Byte में विभिन्न Bits Allocate करके, हम हमारा काम कम से कम Memory में कर सकते हैं। इसे एक उदाहरण द्वारा समझने की कोशिश करते हैं:
Male या Female में से एक मान Store करना हो तो 1 Bit काफी है। यदि व्यक्ति Male है तो Variable को 1 कर दें अन्यथा 0- Single, Married, Divorced या Window में से एक को चुनना, हो तो हमें केवल 0, 1, 2, या 3 की जरूरत होती हैं। इसके लिए 2 Bit काफी हैं।
- आठ में से एक Hobby को चुनना।
- किसी Company द्वारा दिये जाने वाले 16 में से एक Offer को चुनना।
इसका मतलब हमें Gender Store करने के लिए एक Bit की जरूरत होगी। Marital status Store करने के लिए दो Bits, Hobby के लिए तीन Bits व किसी एक Offer को चुनने के लिए हमें चार Bit की जरूरत होगी। इस प्रकार से हमें इन सभी के लिए केवल 10 Bits की जरूरत होगी। जबकि एक int प्रकार के Data Type की Size 16 Bits की होती है। इसलिए हम एक ही int प्रकार के Variable में इन विभिन्न मानों को Store कर सकते हैं। (BitFields in C – Wiki)
जैसा कि हमने पहले भी कहा कि “C” में Bits पर काम करने के लिए कोई Data Type नहीं बनाया गया है। लेकिन “C” में एक व्यवस्था है, जिससे हम किसी Variable के केवल कुछ Bits का ही प्रयोग कर सकते हैं। हमें किसी Variable के जितने Bits का प्रयोग करना हो यदि हम किसी Structure में Member के बाद Colon लगा कर वह संख्या लिख दें, तो “C” Compiler उस Member को लिखे गए अंकों के बराबर Bits Allot कर देता है। जैसे:
struct stu_status { unsigned gender : 1; unsigned mar_stat : 2; unsigned hobby : 3; unsigned options : 1; };
इस प्रकार से ये Structure gender प्रकार के Member को एक Bit, mar_stat प्रकार के Member को 2 Bits hobby को 3 व options को चार Bits प्रदान कर देगा। अब हम इसी Structure का प्रयोग करके किसी भी Student की status को कम से कम Memory द्वारा Access कर सकते हैं। आइये इसी Concept पर आधारित एक प्रोग्राम देखते हैं।
// Program #include<stdio.h> #define Male 0 #define Female 1 #define Single 0 #define Married 1 #define Divorced 2 #define Widowed 4 main() { struct stu_status { unsigned gender : 1; unsigned mar_stat : 2; unsigned hobby : 3; unsigned option : 1; }; struct stu_status Student1; Student1.gender = Male; Student1.mar_stat = Married; Student1.hobby = 6; Student1.option = 10; printf("\, Gender = %d", Student1.gender ); printf("\, Marital Status = %d", Student1.mar_stat ); getch(); } // Output Gender = 0 Marital Status = 1
Buy this eBook to read more about “Bit Fields in C“
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C Programming Language in Hindi | Page: 477 + 265 | Format: PDF