2010-09-27 9 views
15

का बाइनरी प्रतिनिधित्व हे सब, त्वरित प्रश्न: कैसे .NET decimal प्रकार स्मृति में बाइनरी में प्रदर्शित होता है?एक .NET दशमलव

हम सभी जानते हैं कि कैसे चल बिन्दु संख्या जमा हो जाती है और thusly अशुद्धि के लिए उसके कारण, लेकिन मैं निम्नलिखित को छोड़कर किसी भी बारे में decimal जानकारी प्राप्त नहीं कर सकते हैं:

  1. जाहिर अधिक floating- से सही बिन्दु संख्या
  2. स्मृति के 128 बिट ले जाता है
  3. 2^96 + सीमा पर हस्ताक्षर
  4. 28 (कभी कभी 29?) संख्या में कुल महत्वपूर्ण अंक

क्या कोई तरीका है जिससे मैं इसे समझ सकता हूं? मेरे में कंप्यूटर वैज्ञानिक उत्तर की मांग करता है और एक घंटे के शोध के बाद, मुझे यह नहीं मिल रहा है। ऐसा लगता है कि या तो बहुत सारे बर्बाद बिट्स हैं या मैं बस अपने सिर में यह गलत चित्रित कर रहा हूं। क्या कोई इस पर कुछ प्रकाश डाल सकता है? धन्यवाद।

उत्तर

30

Decimal.GetBits जो जानकारी आप चाहते हैं उसके लिए।

मूल रूप से यह मंटिसा के रूप में एक 96 बिट पूर्णांक है, साथ ही एक साइन बिट, साथ ही यह कहने के लिए एक एक्सपोनेंट है कि कितने दशमलव स्थानों को दाईं ओर स्थानांतरित करने के लिए स्थान हैं।

तो प्रतिनिधित्व करने के लिए 3.261 आप 3261 की एक अपूर्णांश, 0 (यानी सकारात्मक) का संकेत बिट, और 3 नोट की एक प्रतिपादक दशमलव कि (जानबूझकर) सामान्यीकृत नहीं है होगा ताकि आप भी प्रतिनिधित्व कर सकते हैं 3.2610 के मंटिसा और 4 के एक्सपोनेंट का उपयोग करके 3.2610, उदाहरण के लिए।

मेरे पास decimal floating point पर मेरे लेख में कुछ और जानकारी है।

+0

+1 शानदार उत्तर, बिंदु के दाईं ओर और जानकारी के साथ समृद्ध। – JoshD

+0

@ जैकोब: नहीं, यह * स्पष्ट * सच नहीं है। यह देखते हुए कि आप एक पूर्णांक से शुरू कर सकते हैं और 0.1 (कहें) के साथ समाप्त हो सकते हैं, यह स्पष्ट रूप से सही स्थानांतरित हो रहा है। यदि आप * केवल * बाईं ओर स्थानांतरित कर सकते हैं, तो आप 10, 100 इत्यादि का प्रतिनिधित्व करने में सक्षम होंगे - लेकिन 0.1, 0.01 आदि नहीं। भविष्य में, कृपया इस तरह के उत्तर का अर्थ बदलने से पहले "एएके" की प्रतीक्षा करें। 'दशमलव' के लिए प्रलेखन देखें: http://msdn.microsoft.com/en-us/library/1k2e8atx.aspx - जहां स्केलिंग कारक को * विभाजित * पूर्णांक के बारे में बात की जाती है, जो इसे स्थानांतरित करने के बराबर है सही। –

+0

मेरी माफ़ी। मेरे लिए यह * दशमलव बिंदु * को * बाएं * में स्थानांतरित करने के बारे में सोचने के लिए और अधिक सहज है, लेकिन अब मुझे लगता है कि आप मंटिसा को "स्थानांतरित करने" का जिक्र कर रहे हैं। – Jacob

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