2012-08-08 15 views
15

बस सी और वेरिएंट में डालें (उस वर्चुअल मशीन के साथ उस वास जावा के विपरीत) विभिन्न लक्ष्यों पर आदिम प्रकारों का आकार काफी भिन्न हो सकता है, और वास्तव में कोई गारंटी नहीं है जब तक कि आप stdint.h में परिभाषित निश्चित चौड़ाई प्रकारों का उपयोग न करें, और फिर भी आपके अनुकरण को उनका समर्थन करना है।क्या आकार बाइट्स की संख्या या सी में किसी प्रकार के ऑक्टेट्स की संख्या लौटाता है?

वैसे भी hypothetically (क्योंकि अधिकांश आधुनिक मशीनों पर एक बाइट एक ऑक्टेट है, नेटवर्किंग उद्देश्यों के लिए मुझे लगता है (ASCII)) आकार का आकार बाइट्स या ऑक्टेट्स में डेटाटाइप के आकार को वापस करने के आकार का है?

+3

बाइट्स, लेकिन एक बाइट (जिसे 'char' के रूप में दर्शाया गया है) में 'CHAR_BITS' बिट्स हैं। यदि आप 'टी' में ऑक्टेट्स की संख्या चाहते हैं, तो 'sizeof (टी) * CHAR_BITS/8' करें। अधिकांश प्लेटफ़ॉर्म पर, 'CHAR_BITS' '8' है। – GManNickG

+2

@GManNickG 'CHAR_BIT' (कोई एस नहीं है) :) – Praetorian

+0

फ्लोट octetPercent = sizeof (T) * CHAR_BIT/8.0; – awiebe

उत्तर

16

उत्तर: sizeof प्रकार के आकार देता है बाइट्स में।


उदाहरण: sizeof(char) 100% 1 होने की गारंटी है, लेकिन इसका मतलब यह नहीं है, कि यह एक ओकटेट (8 बिट) है।


मानक से साबित हुई:

6.5.3.4 में

, बिंदु 2:

sizeof ऑपरेटर आकार पैदावार (बाइट्स में) ने अपने संकार्य की, एक हो सकता है अभिव्यक्ति या एक प्रकार का संश्लेषित नाम। आकार ऑपरेंड के प्रकार से निर्धारित किया जाता है। नतीजा एक पूर्णांक है। यदि ऑपरेंड का प्रकार एक परिवर्तनीय लंबाई सरणी प्रकार है, तो ऑपरेंड का मूल्यांकन किया जाता है; अन्यथा, ऑपरेंड का मूल्यांकन नहीं किया जाता है और नतीजा पूर्णांक निरंतर होता है।

...

जब एक संकार्य (या उसके एक quali फाई एड संस्करण) चार, अहस्ताक्षरित चार, या हस्ताक्षर किए चार, टाइप परिणाम 1 है कि करने के लिए आवेदन किया। जब ऑपरेशन पर लागू होता है जिसमें सर प्रकार होता है, तो परिणाम सरणी में बाइट्स की कुल संख्या होती है) जब ऑपरेशन पर लागू होता है जिसमें संरचना या संघ प्रकार होता है, तो परिणाम इस ऑब्जेक्ट में बाइट्स की कुल संख्या है, आंतरिक और पीछे की पैडिंग सहित।

इसके अलावा, धारा 3.6 में, बिंदु 3:

एक बाइट के टुकडों से सटे अनुक्रम से बना है, संख्या जिनमें से है कार्यान्वयन से परिभाषित

+0

बहुत अच्छी तरह से, धन्यवाद। – awiebe

4

sizeof हमेशा बाइट्स की संख्या के रूप में आकार देता है। लेकिन wikipedia के अनुसार:

प्रोग्रामिंग भाषाओं C और C++, एकल ऑपरेटर sizeof किसी भी डेटाप्रकार का आकार, प्रकार का प्रतिनिधित्व करने के लिए आवश्यक बाइट की संख्या में मापा गणना करने के लिए प्रयोग किया जाता है। इस संदर्भ में एक बाइट एक हस्ताक्षरित चार, जैसा ही है और यह 8 बिट्स से बड़ा हो सकता है, हालांकि यह असामान्य है।

6

sizeof आकार देता है बाइट्स मेंहालांकि, ध्यान दें कि "बाइट" सी मानक में एक तकनीकी शब्द है, और इसे sizeof(char) == 1 परिभाषित किया गया है।

1

मेरे अपने अनुभव से, विदेशी 'सी' compilers के साथ एम्बेडेड माइक्रो नियंत्रकों पर काम कर रहा, मैंने देखा है:

sizeof(uint8) 

वापसी 1

sizeof(uint16) 

वापसी 1

sizeof(uint32) 

वापसी 2

स्पष्ट रूप से, मैं एक मशीन से निपट रहा था सबसे छोटी पता योग्य इकाई 16 बिट थी, इसलिए आकार C89 या C99 का पालन नहीं करता है।

मैं कहूंगा कि मुख्यधारा C89 & सी 99 अनुपालन प्रणाली पर, स्वीकृत उत्तर सही है। दुर्भाग्यवश, एक "सी" कंपाइलर को अभी भी "सी" कंपाइलर कहा जा सकता है, भले ही यह 25 वर्षीय मानक का पालन न करे। मुझे उम्मीद है कि यह उत्तर चीजों को परिप्रेक्ष्य में रखने में मदद करेगा, और अधिक विदेशी सिस्टम दिए जाएंगे।

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