Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी . में बिट फील्ड्स

इस खंड में हम जानेंगे कि C में बिट फील्ड क्या है।

मान लीजिए कि आपके सी प्रोग्राम में स्थिति नामक संरचना में समूहीकृत कई TRUE/FALSE चर शामिल हैं, जो इस प्रकार हैं -

struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status;

इस संरचना के लिए 8 बिट मेमोरी स्पेस की आवश्यकता होती है लेकिन वास्तव में, हम प्रत्येक वेरिएबल में 0 या 1 को स्टोर करने जा रहे हैं। सी प्रोग्रामिंग भाषा ऐसी स्थितियों में मेमोरी स्पेस का उपयोग करने का एक बेहतर तरीका प्रदान करती है।

यदि आप किसी संरचना के अंदर ऐसे चर का उपयोग कर रहे हैं तो आप एक चर की चौड़ाई को परिभाषित कर सकते हैं जो सी संकलक को बताता है कि आप केवल उन बिट्स का उपयोग करने जा रहे हैं। उदाहरण के लिए, उपरोक्त संरचना को निम्नानुसार फिर से लिखा जा सकता है -

struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status;

उपरोक्त संरचना में स्थिति चर के लिए 4 बिट मेमोरी स्पेस की आवश्यकता होती है, लेकिन मानों को संग्रहीत करने के लिए केवल 2 बिट्स का उपयोग किया जाएगा।

यदि आप 1 बिट की चौड़ाई वाले प्रत्येक 32 चर का उपयोग करेंगे, तो स्थिति संरचना भी 4 बिट्स का उपयोग करेगी। हालाँकि जैसे ही आपके पास 33 वेरिएबल्स होंगे, यह मेमोरी के अगले स्लॉट को आवंटित करेगा और यह 8 बिट्स का उपयोग करना शुरू कर देगा। आइए अवधारणा को समझने के लिए निम्नलिखित उदाहरण देखें -

उदाहरण कोड

#include <stdio.h>
#include <string.h>
/* define simple structure */
struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status1;
/* define a structure with bit fields */
struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status2;
int main( ) {
   printf( "Memory size occupied by status1 : %d\n", sizeof(status1));
   printf( "Memory size occupied by status2 : %d\n", sizeof(status2));
   return 0;
}

आउटपुट

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

बिट फील्ड घोषणा:

एक बिट-फ़ील्ड की घोषणा का एक संरचना के अंदर निम्न रूप है -

struct {
   type [member_name] : width ;
};

निम्न तालिका बिट फ़ील्ड के चर तत्वों का वर्णन करती है -

<थेड> <थ>विवरण
तत्व
टाइप करें एक पूर्णांक प्रकार जो निर्धारित करता है कि बिट-फ़ील्ड के मान की व्याख्या कैसे की जाती है। प्रकार इंट, साइन इंट या अहस्ताक्षरित इंट हो सकता है।
सदस्य_नाम बिट-फ़ील्ड का नाम।
चौड़ाई बिट-फ़ील्ड में बिट्स की संख्या। चौड़ाई निर्दिष्ट प्रकार की बिट चौड़ाई से कम या उसके बराबर होनी चाहिए।

पूर्वनिर्धारित चौड़ाई के साथ परिभाषित चर को बिट फ़ील्ड कहा जाता है। एक बिट फ़ील्ड एक बिट से अधिक धारण कर सकता है; उदाहरण के लिए, यदि आपको 0 से 7 तक के मान को संग्रहीत करने के लिए एक चर की आवश्यकता है, तो आप 3 बिट की चौड़ाई के साथ एक बिट फ़ील्ड को निम्नानुसार परिभाषित कर सकते हैं -

struct {
   unsigned int age : 3;
} Age;

उपरोक्त संरचना परिभाषा सी संकलक को निर्देश देती है कि आयु चर मूल्य को संग्रहीत करने के लिए केवल 3 बिट्स का उपयोग करने जा रहा है। यदि आप 3 बिट से अधिक का उपयोग करने का प्रयास करते हैं, तो यह आपको ऐसा करने की अनुमति नहीं देगा। आइए निम्नलिखित उदाहरण का प्रयास करें -

उदाहरण कोड

#include <stdio.h>
#include <string.h>
struct {
   unsigned int age : 3;
} Age;
int main( ) {
   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );
   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );
   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );
   return 0;
}

आउटपुट

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0

  1. सी ग्राफिक्स में बार () फ़ंक्शन

    बार () फ़ंक्शन एक सी ग्राफिक्स फ़ंक्शन है जिसका उपयोग सी प्रोग्रामिंग भाषा में ग्राफिक्स बनाने के लिए किया जाता है। ग्राफ़िक्स.एच हेडर में ऐसे फ़ंक्शन होते हैं जो ग्राफ़िक्स को आरेखित करने के लिए कार्य करते हैं। बार () फ़ंक्शन को हेडर फ़ाइल में भी परिभाषित किया गया है। सिंटैक्स शून्य बार (इंट लेफ्ट

  1. सी . में एक सरणी में श्रेणियों के उत्पाद

    एक इनपुट के रूप में सरणी, एल, आर, पी के साथ दिया गया है और कार्य मॉड्यूल के तहत उत्पाद के साथ एल और आर के बीच की श्रेणियों को आउटपुट के रूप में ढूंढना और इसे प्रदर्शित करना है जैसा कि चित्र में दिया गया है, हमारे पास तत्वों की सरणी है और L जो कि 2 के रूप में एक बायाँ मान है और R जो कि 2 के रूप में

  1. सी / सी ++ में बहुआयामी सरणी

    C/C++ में, बहुआयामी सरणी को सरल शब्दों में सरणियों के सरणी के रूप में परिभाषित किया गया है। बहुआयामी सरणियों में डेटा को सारणीबद्ध रूप में (पंक्ति प्रमुख क्रम में) संग्रहीत किया जाता है। निम्न आरेख 3 x 3 x 3 आयाम वाले बहुआयामी सरणी के लिए स्मृति आवंटन रणनीति दिखाता है। एल्गोरिदम Begin