2011-04-04 8 views
8

जब मैं sizeof(a) देता हूं, जहां a=13.33, एक फ्लोट चर, आकार 4 बाइट्स है। लेकिन अगर मैं सीधे sizeof(13.33) देता हूं, आकार 8 बाइट्स है।क्यों आकार (13.33) 8 बाइट्स है?

मुझे समझ में नहीं आता कि क्या हो रहा है। क्या कोई मदद कर सकता है?

+13

दोस्त, इस प्रश्न को शीर्ष पर टक्कर देने के लिए 'गणित' टैग को जोड़ने और हटाने को रोकें। – Xeo

+1

इसके बजाए 13.ff का प्रयास करें और यह लिंक भी देखें http://stackoverflow.com/questions/2331751/does-the-size-of-an-int-depend-on-the-compiler-and-or-processor –

+0

[क्यों फ्लोटिंग पॉइंट वैल्यू को 3.14 में डिफ़ॉल्ट रूप से डबल के रूप में माना जाता है?] (Https://stackoverflow.com/q/4353780/995714) –

उत्तर

44

वे भाषा के नियम हैं।

13.33 एक संख्यात्मक शाब्दिक है। इसे डबल के रूप में माना जाता है क्योंकि यह एक डबल है। यदि आप 13.33 को फ्लोट शाब्दिक के रूप में माना जाना चाहते हैं, तो आप 13.33 एफ बताते हैं।

13.33 एक डबल शाब्दिक है। यदि आकार (फ्लोट) == 4, आकार (13.33 एफ) == 4 भी पकड़ना चाहिए क्योंकि 13.33 एफ एक फ्लोट शाब्दिक है।

19

शाब्दिक 13.33 को डबल बाइटिशन फ्लोटिंग पॉइंट मान, 8 बाइट चौड़ा माना जाता है।

+2

एक सटीक रूप से एक सिंगल परिशुद्धता फ्लोट के रूप में एक अक्षर को चिह्नित करने के लिए, '13.33f आज़माएं '। 'आकार (13.33 एफ) 'अपेक्षित 4 लौटाता है। –

13

13.33 शाब्दिक को 'डबल' के रूप में माना जा रहा है, न कि 'फ्लोट'।

इसके बजाय 13.33f आज़माएं।

8

क्योंकि 13.33 एक double है, जो इसे float पर छोटा कर दिया जाता है यदि आप इसे असाइन करते हैं। और double 8bytes है। असली फ्लोट बनाने के लिए, 13.33f का उपयोग करें (f पर ध्यान दें)।

9

आपके चर का प्रकार और आकार ठीक है। यह सिर्फ इतना है कि कंपाइलर के लिए अक्षर के लिए कुछ डिफ़ॉल्ट प्रकार हैं, उन निरंतर मान आपके प्रोग्राम में हार्ड-कोड किए गए हैं।

यदि आप sizeof(1) का अनुरोध करते हैं, तो आपको sizeof(int) मिल जाएगा। यदि आप sizeof(2.5) का अनुरोध करते हैं, तो आपको sizeof(double) मिल जाएगा। वे स्पष्ट रूप से एक char और एक फ्लोट में फिट होंगे, लेकिन कंपाइलर के आपके अक्षर के लिए डिफ़ॉल्ट प्रकार हैं और उन्हें असाइनमेंट तक इस तरह व्यवहार करेंगे।

हालांकि आप इस डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं। उदाहरण के लिए:

2.5 // as you didn't specify anything, the compiler will take it for a double. 
2.5f // ah ha! you're specifying this literal to be float 

चीयर्स!

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

  • कोई संबंधित समस्या नहीं^_^