पर दो बार कास्टिंग मुझे कुछ परेशान कर रहा है और मुझे वीएम चश्मा पर अधिक जानकारी नहीं मिली। यह थोड़ा अस्पष्ट है और अगर कोई मुझे समझा सकता तो अच्छा होगा।एक दूसरे संख्यात्मक प्रकार
कोड के इन कुछ पंक्तियों .....
double myTest = Double.MAX_VALUE;
System.out.println("1. float: " + (float)myTest);
System.out.println("2. int: " + (int)myTest);
System.out.println("3. short: " + (short)myTest);
System.out.println("4. byte: " + (byte)myTest);
..... इस उत्पादन का उत्पादन:
- फ्लोट: इन्फिनिटी
- पूर्णांक: 2147483647
- कम: -1
- बाइट: -1
byte
, short
और int
दो पूरक के साथ 8, 16, 32 बिट हैं। float
और double
32 और 64 बिट आईईईई 754 (see here) हैं।
मेरी समझ से, double
का अधिकतम मान इंगित करता है कि मंटिस (52 बिट्स) के सभी बिट्स 1 पर स्विच किए जाते हैं। इसलिए यह आश्चर्यजनक नहीं है कि बहुत कम या बाइट रिटर्न -1 यानी सभी बिट्स को 1 पर स्विच किया जाता है। ऐसा लगता है कि कास्ट double
की 'पूंछ' रखता है ताकि यह 8 बिट byte
या 16 बिट short
में फिट हो।
मुझे int
पर कास्ट आश्चर्य है और कुछ हद तक, float
पर कास्ट किया गया है। "2. int: 2147483647" प्राप्त करना कैसे संभव है जो 0x7FFFFFFF है, अधिकतम मूल्य जबकि छोटा और बाइट 3. और 4. -1 है?
float
पर कास्ट भी अजीब है। यदि myTest
की 'पूंछ' पर 32 बिट्स रखे गए थे, तो क्या इसे NaN
उत्पन्न नहीं करना चाहिए?
धन्यवाद यह बहुत दिलचस्प है। तो एक बार डबल को एक इंट ("मेरे उदाहरण में सबसे बड़ा प्रतिनिधित्व योग्य मूल्य" के साथ डाला जाता है), इसे एक बाइट या एक अलग दर्शन के साथ छोटा किया जाता है ("सभी को सबसे कम ऑर्डर बिट्स छोड़ देता है")। – Jerome
@ जेरोम: बहुत ज्यादा (सिवाय इसके कि मुझे लगता है कि मध्यवर्ती प्रकार 'लंबा' है, लेकिन परिणाम को प्रभावित नहीं करता है)। – NPE
यह ध्यान देने योग्य है कि यद्यपि 'फ्लोट' के लिए 'डबल' कास्टिंग करने से कुछ अलग-अलग मान अलग-अलग हो सकते हैं, यह इस तथ्य की तुलना में मामूली समस्या है कि 'फ्लोट' को 'डबल' में कास्टिंग करने से चीजें हो सकती हैं जिन्हें इसके बजाय अलग नहीं माना जाना चाहिए * गलत * सॉर्ट किया जा सकता है। उदाहरण के लिए, 'फ्लोट एफ = 16777217 दिया गया; डबल डी = 16777216.0000001; ', जो बड़ा है -' एफ' या 'डी'? 'फ्लोट एफएफ = 1 ई 38 एफ * 10 एफ के बारे में कैसे; डबल डीडी = 1e300; '? 'एफएफ' और' डीडी' के बारे में "अलग-अलग" के रूप में बहुत अच्छा नहीं होगा, लेकिन कह रहा है कि 'ff> dd' सैकड़ों ऑर्डर-ऑफ-आयाम गलत है। – supercat