2011-12-14 9 views
15

मैं C++ FAQ पढ़ रहा था और यहयदि मशीन में 8 बिट्स बाइट हैं तो int8_t क्या है?

C++ भाषा की गारंटी देता है एक बाइट हमेशा किया है कम से कम 8 बिट

तो क्या हुआ कि <cstdint> प्रकार के लिए क्या मतलब है चाहिए कहते हैं?

साइड प्रश्न - यदि मैं बाइट्स की एक सरणी चाहता हूं तो क्या मुझे int8_t या char का उपयोग करना चाहिए और क्यों?

+1

तकनीकी रूप से यह एक सी प्रश्न है, क्योंकि प्रकार को सी मानक (§7.18) पर वापस संदर्भित किया जाता है। – kennytm

उत्तर

14

सी ++ (और सी भी अच्छी तरह से) intX_t (यानी सटीक चौड़ाई पूर्णांक प्रकार) टाइपिफ़ीफ वैकल्पिक परिभाषित करता है। तो, अगर वहां कोई एड्रेसेबल यूनिट नहीं है जो ठीक 8-बिट चौड़ा है तो यह वहां नहीं होगा।

आप बाइट्स की एक सरणी चाहते हैं, आप sizeof char (और signed char और unsigned char) के रूप में char, का उपयोग करना चाहिए हमेशा 1 बाइट होने के लिए अच्छी तरह से परिभाषित है।

+2

रुको, अगर मुझे सही ढंग से आकार दिया गया है तो चार को परिभाषित किया गया है, लेकिन मानक यह निर्दिष्ट नहीं करता है कि यह 1 बाइट या कुछ और – BlackBear

+0

@ ब्लैकबियर: नहीं, मानक बहुत स्पष्ट है। बाइट्स में 'sizeof' रिटर्न आकार, और' sizeof (char) == 1'। –

+4

मैं विभिन्न आकार के बाइट्स के साथ सिस्टम में आईओ को कैसे संभाल सकता हूं? या मुझे कोशिश भी नहीं करनी चाहिए? – David

2

क्या बिल्ली प्लस प्लस पहले ही कहा गया है (उस प्रकार वैकल्पिक है) को जोड़ने के लिए, आप परीक्षण कर सकते हैं कि क्या यह की तरह कुछ का उपयोग करके मौजूद है:

#ifdef INT8_MAX 
// type int8_t exists. 
#endif 

या अधिक होने की संभावना:

#ifndef INT8_MAX 
#error Machines with bytes that don't have 8 bits aren't supported 
#endif 
+1

एक कंपाइलर 'int8_t' को परिभाषित कर सकता है और सॉफ़्टवेयर में गणना कर सकता है जबकि मशीन प्रति बिट 8 बिट्स नहीं है। – Dani

+0

मुझे इसके बारे में निश्चित नहीं है। मुझे लगता है कि 'int8_t' को मूल अभिन्न प्रकारों में से एक के लिए टाइपिफ़ होना चाहिए। लेकिन मुझे यकीन नहीं। 9 बिट 1 के पूरक (कुछ यूनिसिस) वाली मशीन पर ऐसा कार्यान्वयन बहुत धीमा होगा। –

+0

@JamesKanze, यही कारण है कि आपको जब भी संभव हो "मूल" प्रकार का उपयोग करना चाहिए। – vonbrand

संबंधित मुद्दे