C भाषा में बिट फिल्ड क्या है What is BIT Field
C भाषा में, BIT Field एक विशेष प्रकार का डेटा टाइप होता है जो कि कुछ बिट्स को संग्रहित करने के लिए उपयोग किया जाता है। इस टाइप की वेरिएबल का आकार बहुत कम होता है, जिससे मेमोरी के उपयोग को कम किया जा सकता है।
जैसे कि, अगर हमें केवल दो बिट्स को संग्रहित करने हों तो हम BIT Field का उपयोग कर सकते हैं। उदाहरण के लिए, अगर हमें किसी स्थान के लिए दिशा को निर्धारित करना हो, तो हम उस स्थान के लिए दो बिट्स का उपयोग कर सकते हैं। इस तरह, एक BIT Field उपयोग करके हम डेटा को अधिक संग्रहित करते हुए मेमोरी के उपयोग को कम कर सकते हैं।
बिट फील्ड को संरचित करने के लिए, स्ट्रक्चर टाइप या यूनियन टाइप का उपयोग किया जा सकता है। बिट फील्ड डेक्लेअरेशन में, हम बिट फील्ड के नाम, बिट फील्ड में कुल बिट की संख्या और बिट्स के प्रकार को निर्दिष्ट करते हैं।
Bit Field Declaration करना
C भाषा में Bit Field Declaration करने के लिए, आपको निम्नलिखित संगठन का उपयोग करना होगा:
struct [structure_name] {
[data_type] [field_name] : [number_of_bits];
};
यहां, [structure_name] को आप अपनी संरचना के नाम से बदल सकते हैं। [data_type] के रूप में आप किसी भी C डेटा टाइप का उपयोग कर सकते हैं, जैसे int, char आदि। [field_name] एक फ़ील्ड के नाम के रूप में होगा जिसे आप अपनी पसंद के अनुसार नामित कर सकते हैं। [number_of_bits] एक संख्या होगी जो बताएगी कि कितने बिट इस फ़ील्ड में संग्रहित किए जाएँगे।
उदाहरण के लिए, यदि आपको दो बिट्स को संग्रहित करना हो जो किसी दिशा को निर्देशित करते हैं, तो आप निम्नलिखित संरचना का उपयोग कर सकते हैं:
struct direction {
unsigned int north : 1;
unsigned int east : 1;
unsigned int south : 1;
unsigned int west : 1;
};
इस संरचना में, हर फ़ील्ड के लिए 1 बिट का उपयोग किया जा रहा है जिससे कि यह उन दिशाओं को संग्रहित कर सके जिन्हें निर्दिष्ट किया गया है। यदि आप अधिक बिट संग्रहित करना चाहते हैं, तो आप उन बिटों की संख्या को बढ़ा सकते हैं
Bit Field का उदाहरण
एक उदाहरण के माध्यम से Bit Field को समझते हैं।
यदि आप एक प्रोग्राम लिख रहे हैं जो एक संदेश प्रिंट करता है कि कितनी जगह आपके कंप्यूटर के डिस्क में उपलब्ध है, तो आप निम्नलिखित तरीके से इसे कर सकते हैं:
#include <stdio.h>
struct disk_space {
unsigned int used_space : 16;
unsigned int free_space : 16;
};
int main() {
struct disk_space ds = { 16384, 32768 };
printf("Used disk space: %u\n", ds.used_space);
printf("Free disk space: %u\n", ds.free_space);
return 0;
}
इस प्रोग्राम में, एक संरचना नामक 'disk_space' बनाई गई है जो दो फ़ील्ड हैं - 'used_space' और 'free_space'। दोनों फ़ील्ड unsigned int डेटा टाइप हैं।
यहां, इन फ़ील्डों के लिए बिट-फ़ील्ड उपयोग किया गया है। दोनों फ़ील्डों में 16 बिट हैं, जो कि 2 बाइट या 2 वर्णमाला के बराबर हैं। यह इसका मतलब है कि इन फ़ील्डों में सिर्फ 16 बिट होंगे जिनसे कि ये 0 से 65535 के बीच किसी भी संख्या को संग्रहित कर सकते हैं।
मुख्य फ़ंक्शन में, हमने एक संरचना वेरिएबल 'ds' का उपयोग करके दो फ़ील्डों को मान दिए हैं। फिर हम printf() फ़ंक्शन का उपयोग करके इन फ़ील्डों के मानों को प्रिंट कर रहे हैं। इस प्रोग्राम के उत्पादन में, यह उपयोग करते हुए बिट-फ़ील्ड द्वारा संख्यात्मक मानों को संग्रहित करता है।
अब यदि आप यह प्रोग्राम बिना बिट-फ़ील्ड के लिखते हैं, तो यह बहुत ही अधिक स्थान का उपयोग करेगा। आप इसे निम्नलिखित तरीके से बिना बिट-फ़ील्ड के लिख सकते हैं:
#include <stdio.h>
struct disk_space {
unsigned short used_space;
unsigned short free_space;
};
int main() {
struct disk_space ds = { 16384, 32768 };
printf("Used disk space: %u\n", ds.used_space);
printf("Free disk space: %u\n", ds.free_space);
return 0;
}
इस प्रोग्राम में, यह दोनों फ़ील्ड unsigned short डेटा टाइप हैं। इसका मतलब है कि ये दोनों 2 बाइट लंबे होंगे, जो बिट-फ़ील्ड वाले प्रोग्राम से काफी अधिक होगा।
इस प्रोग्राम में यह बिट-फ़ील्ड उपयोग करने से हम डिस्क स्पेस के मानों को संग्रहित करते हुए कम स्थान का उपयोग करते हुए उत्पादन करते हैं।