मुझे अपने डेटा का प्रतिनिधित्व करने के लिए केवल एक बिट की आवश्यकता है - 1 या 0. सी में ऐसा करने का सबसे अच्छा तरीका क्या है? "सामान्य" डेटा प्रकार बहुत बड़े हैं।सबसे छोटा डेटा प्रकार - क्या मैं एक बिट चर परिभाषित कर सकता हूं?
उत्तर
यदि आप वास्तव में चाहते हैं, तो आप एक सदस्य चर, bit-fielded से 1 बिट के साथ एक संरचना बना सकते हैं।
याद रखें, सदस्य चर के डेटा प्रकार को unsigned
होना चाहिए, क्योंकि आपको 0
और 1
स्टोर करने की आवश्यकता है।
आप
typedef struct foo
{
unsigned x:1;
} foo;
आप कहाँ संकलक है कि आप केवल x
में से एक बिट का उपयोग किया जाएगा बता दिया है बना सकते हैं।
लेकिन संरचना पैकिंग व्यवस्था के कारण (सी मानक जानबूझकर लचीला है ताकि संकलक मशीन आर्किटेक्चर के अनुसार अनुकूलित कर सकें), यह अच्छी तरह से हो सकता है कि यह नियमित रूप से unsigned
और स्मृति के रूप में स्मृति में जितनी अधिक जगह पर कब्जा कर लेता है foo
एस की सरणी को थोड़ा सा संगत नहीं होना चाहिए।
आम तौर पर, सी में डेटा का सबसे छोटा पता योग्य हिस्सा एक बाइट है। आपके पास थोड़ा पॉइंटर नहीं हो सकता है, इसलिए आप 1 बिट आकार के चर को घोषित नहीं कर सकते हैं। लेकिन जैसा कि सौरव घोष ने पहले से ही बताया है, आप बिटफील्ड घोषित कर सकते हैं, जहां एक बिट सीधे पहुंचा जा सकता है।
पोर्टेबल तरीका एक चर की परिभाषा है जो व्यक्तिगत बिट्स को झंडे के रूप में उपयोग किया जाता है।
#define FLAG_FOO 0
#define FLAG_BAR 1
// in case platform does not support uint8_t
typedef unsigned char uint8_t;
uint8_t flags;
void flag_foo_set()
{
flags |= (1 << FLAG_FOO);
}
void flag_foo_clr()
{
flags &= ~(1 << FLAG_FOO);
}
uint8_t flag_foo_get()
{
return flags & (1 << FLAG_FOO);
}
हालांकि यह सी बिट फ़ील्ड की तुलना में सुपरफ्लूओ प्रतीत हो सकता है। यह मूल रूप से प्रत्येक एएनएसआई सी संकलक के लिए पोर्टेबल है।
बहुत pedantically, 'uint8_t' ** है ** द्वारा * हर * एएनएसआई सी संकलक समर्थित होना है? मैं पूरी तरह से यकीन नहीं कर रहा हूँ। 'हस्ताक्षरित चार' एक बेहतर विकल्प हो सकता है। – Bathsheba
नहीं है, uintX_t प्रकार केवल C99 के लिए आवश्यक हैं - पूर्ण पोर्टेबिलिटी के लिए, अहस्ताक्षरित char' –
'typedef अहस्ताक्षरित चार uint8_t का उपयोग'; 'मेरे लिए संभावित खतरनाक लगता है। – Bathsheba
यदि आपको लाखों इन झंडे की आवश्यकता नहीं है या अत्यधिक सीमित स्मृति बाधाएं हैं, तो सबसे अच्छा तरीका निश्चित रूप से int
है।
ऐसा इसलिए है क्योंकि int
आमतौर पर आपके प्लेटफ़ॉर्म के प्राकृतिक शब्द आकार से मेल खाता है और ठीक से गठबंधन किया जा सकता है, जल्दी से पहुंचा जा सकता है। मशीन किसी भी समय एक शब्द पढ़ती है और एकल बिट्स का उपयोग करके मास्किंग और स्थानांतरण की आवश्यकता होती है, जिसकी लागत समय होती है। रैम के गीगाबाइट्स के साथ अपने ठेठ पीसी पर, यह सिर्फ मूर्खतापूर्ण होगा।
स्मृति खपत वास्तव में एक मुद्दा है, तो bitfield संरचनाएं हैं।
- 1. मैं LINQ में चर को कैसे परिभाषित कर सकता हूं?
- 2. क्या मैं एक उद्देश्य-सी इंटरफ़ेस में 'प्रोटोकॉल' प्रकार का एक चर घोषित कर सकता हूं?
- 3. मैं पर्ल में एक सरणी कैसे छोटा कर सकता हूं?
- 4. क्या मैं HTML में एक चर घोषित कर सकता हूं?
- 5. क्या मैं जावा में चर अधिभारित कर सकता हूं?
- 6. क्या कोई तरीका है कि मैं लाटेक्स में एक चर परिभाषित कर सकता हूं?
- 7. क्या मैं विंडोज़ पर 64 बिट प्रक्रिया में 32 बिट डीएलएल लोड कर सकता हूं?
- 8. क्या मैं वैश्विक चर परिभाषित करने के लिए __init__.py का उपयोग कर सकता हूं?
- 9. क्या मैं एक सी ++ मैक्रो को फिर से परिभाषित कर सकता हूं, फिर इसे वापस परिभाषित कर सकता हूं?
- 10. मैं "डू-नथिंग" सॉर्ट कैसे परिभाषित कर सकता हूं?
- 11. मैं टेबल को ठीक से कैसे छोटा कर सकता हूं?
- 12. मैं एक .NET MySQLCommand में एक MySQL उपयोगकर्ता परिभाषित चर का उपयोग कैसे कर सकता हूं?
- 13. क्या मैं पर्यावरण चर को अनदेखा कर सकता हूं?
- 14. क्या मैं अपने पर्यावरण चर पर भरोसा कर सकता हूं?
- 15. मैं पर्ल में 64-बिट अंकगणित कैसे कर सकता हूं?
- 16. टाइपस्क्रिप्ट में एक सीएसएस रंग के लिए मैं एक प्रकार को कैसे परिभाषित कर सकता हूं?
- 17. मैं 32-बिट विभाजन निर्देश के साथ 64-बिट विभाजन कैसे कर सकता हूं?
- 18. क्या मैं खाली बाधा प्रकार को पैरामीटर कर सकता हूं?
- 19. मैं एक ट्विग टेम्पलेट फ़ाइल के अंदर वैश्विक चर को कैसे परिभाषित कर सकता हूं?
- 20. मैं एक vim फ़ंक्शन में एक चर के प्रकार को कैसे निर्धारित कर सकता हूं?
- 21. मैं एलएलवीएम में वैश्विक चर कैसे घोषित कर सकता हूं?
- 22. सबसे छोटा जावा रनटाइम मैं कानूनी रूप से वितरित कर सकता हूं?
- 23. क्या मैं एक शून्य अनुरोध या प्रतिक्रिया के साथ एक जीआरसीसी कॉल परिभाषित कर सकता हूं?
- 24. मैं जंग का कार्य प्रकार कैसे परिभाषित कर सकता हूं जो अपना प्रकार देता है?
- 25. सी # मैं एक शब्दकोश को परिभाषित कैसे कर सकता हूं जिसमें विभिन्न प्रकार हैं?
- 26. क्या MySQL समर्थन उपयोगकर्ता परिभाषित डेटा प्रकार
- 27. क्या मैं एम्बर-डेटा मॉडल विशेषताओं के लिए डिफ़ॉल्ट मान परिभाषित कर सकता हूं?
- 28. एक डेटा प्रकार को परिभाषित करना जो
- 29. 64 बिट मशीन पर इस संरचना को सबसे छोटा आकार क्या बना सकता है?
- 30. क्या मैं 64 बिट पायथन में 32 बिट डीएल या एक्सई का उपयोग कर सकता हूं?
स्मृति इतनी दुर्लभ है कि आप अलग-अलग बिट्स के रूप में मान संग्रहीत करने की आवश्यकता है? आप इसके लिए क्या उपयोग कर रहे हैं? शायद एक बेहतर तरीका है। –