1 और 7 मानों की सीमा को सीमित करने के लिए छोटे आकार हैं। वे आमतौर पर संरचनाओं और संघों में पाए जाते हैं।
typedef struct {
unsigned char a : 1;
unsigned char b : 7;
} tOneAndSevenBits;
एक 8 बिट मूल्य, b
के लिए a
और 7 बिट के लिए एक बिट बनाता है: उदाहरण के लिए, कुछ सिस्टम पर, कोड (char
चौड़ाई और पैकिंग के नियम, आदि पर निर्भर करता है)। ,
typedef struct {
unsigned char leftFour : 4;
unsigned char rightFour : 4;
} tTwoNybbles;
हमारे बीच भाषा वकीलों के लिए:
आमतौर पर इस तरह के एक 4 बिट nybble जो एक 8 बिट चार के ऊपरी आधे हिस्से में निहित हो सकता है के रूप में "संकुचित" मूल्यों का उपयोग करने की सी में इस्तेमाल किया सी ++ 11 मानक के 9.6 खंड में विस्तार से यह बताता है, थोड़ा दूसरे शब्दों में बयान:
बिट-क्षेत्रों [class.bit]
रूप
पहचानकर्ता ऑप्ट विशेषता-विनिर्देशक ऑप्ट के एक सदस्य-declarator: निरंतर अभिव्यक्ति
थोड़ा सा क्षेत्र निर्दिष्ट करता है; इसकी लंबाई को कोलन द्वारा बिट-फील्ड नाम से सेट किया गया है। वैकल्पिक विशेषता-निर्दिष्ट घोषित होने वाली इकाई के लिए उपयुक्त है। बिट-फील्ड विशेषता वर्ग सदस्य के प्रकार का हिस्सा नहीं है।
निरंतर अभिव्यक्ति एक अभिन्न निरंतर अभिव्यक्ति होगी जो शून्य से अधिक या बराबर मान के साथ होगी। अभिन्न निरंतर अभिव्यक्ति का मान बिट-फ़ील्ड के प्रकार के ऑब्जेक्ट प्रस्तुति में बिट्स की संख्या से बड़ा हो सकता है; ऐसे मामलों में अतिरिक्त बिट्स को पैडिंग बिट्स के रूप में उपयोग किया जाता है और बिट-फील्ड के मान प्रतिनिधित्व में भाग नहीं लेते हैं।
कक्षा वस्तु के भीतर बिट-फ़ील्ड का आवंटन कार्यान्वयन-परिभाषित है। बिट-फ़ील्ड का संरेखण कार्यान्वयन-परिभाषित है। बिट-फ़ील्ड कुछ एड्रेसेबल आवंटन इकाई में पैक किए जाते हैं।
नोट: बिट-फ़ील्ड कुछ मशीनों पर आवंटन इकाइयों को घुमाएं और दूसरों पर नहीं। बिट-फ़ील्ड को कुछ मशीनों पर दाएं से बाएं असाइन किया जाता है, जो दूसरों पर बाएं से दाएं होते हैं। - अंत नोट
कड़ाई से बोलते हुए, शुद्ध सी में उनका उपयोग 'हस्ताक्षरित चार' के साथ नहीं किया जाएगा। सी केवल बिट intfield घोषणाओं में 'int',' हस्ताक्षरित int 'और' हस्ताक्षरित int 'की अनुमति देता है। सी 99 '_Bool' जोड़ता है। 'हस्ताक्षरित char' सी – AnT
में बिटफील्ड के लिए कानूनी प्रकार नहीं है, यह कम से कम c1x में 6.7.2.1 पैरा 4 में एक कार्यान्वयन समस्या है, एक बिट-फ़ील्ड में एक प्रकार होगा जो \ _Bool, हस्ताक्षरित int का एक योग्य या अयोग्य संस्करण है , हस्ताक्षरित int, या * कुछ अन्य कार्यान्वयन-परिभाषित प्रकार *। – paxdiablo
@paxdiablo: हां, लेकिन "कुछ अन्य कार्यान्वयन-परिभाषित प्रकार" बिट वास्तव में अनावश्यक है, क्योंकि मानक के विशिष्ट खंड में स्पष्ट अनुमति के बिना कार्यान्वयन को हमेशा फिट होने के तरीके को भाषा में विस्तारित करने की अनुमति दी जाती है। एक सी कार्यान्वयन सी कोड के भीतर पास्कल और फोरट्रान कोड संकलित कर सकता है - कोई भी इसे करने से रोकता है। फिर भी, इस कारण से फोर्ट्रान कोड को संभवतः वैध सी कोड के रूप में डिस्क करना अजीब होगा। वही "लागू करने-परिभाषित प्रकार" पर भी लागू होता है। – AnT