2015-06-27 8 views
5
char c1 = 123; //Compiles fine 
char c2 = 123456; //Error: cannot convert from int to char 

जावा बहुत चालाक निर्धारित करने के लिए एक पूर्णांक काफी छोटा एक चरित्र को परिवर्तित किया है या नहीं। यह बहुत ही कम फ्लोटिंग पॉइंट अक्षर को एक फ्लोट में परिवर्तित करने में सक्षम क्यों नहीं है? उदाहरण के लिए:चार सी = कुछ पूर्णांक अक्षर संकलित हो सकता है लेकिन फ्लोट एफ = कुछ फ़्लोटिंग पॉइंट शाब्दिक कभी संकलित नहीं होगा। क्यूं कर?

float f1 = 0.3; //Error: cannot convert from double to float 
float f2 = 0.3f; //Compiles fine 

चार c = कुछ पूर्णांक शाब्दिक संकलन लेकिन नाव च सकता है = कुछ चल बिन्दु शाब्दिक संकलन कभी नहीं होगा। क्यूं कर?

पुनश्च: मैं, जानते हैं कि एक चल बिन्दु शाब्दिक डिफ़ॉल्ट

+0

संभावित डुप्लिकेट [जावा: आपको फ्लोट शाब्दिक में 'एफ "निर्दिष्ट करने की आवश्यकता क्यों है?] (Http://stackoverflow.com/questions/14102955/java-why-do-you-need- टू-निर्दिष्ट-ए-इन-ए-फ्लोट-शाब्दिक) – RealSkeptic

+0

मेरा प्रश्न फ़्लोटिंग पॉइंट अक्षर में 'एफ' के बारे में नहीं है। यह एक मामले में किसी भी समस्या के बिना एक छोटे डेटा प्रकार को परिवर्तित करने के तरीके के बारे में है (चार से int, 32 बिट्स से 16 बिट्स) जबकि यह दूसरे मामले में एक संकलन त्रुटि देता है (डबल टू फ्लोट, 64 बिट्स 32 बिट्स)। शाब्दिक छोटा फ्लोट वैरिएबल फिट करने के लिए पर्याप्त छोटा है जैसे int छोटा था char फिट करने के लिए पर्याप्त। @ RealSkeptic –

+0

उत्तर अभी भी उस प्रश्न में है - सबसे अच्छा जवाब स्वीकार्य नहीं है, हालांकि – RealSkeptic

उत्तर

7

0.3 एक डबल के रूप में व्यवहार किया जाता है द्वारा एक डबल के रूप में व्यवहार किया जाता है, इसलिए इसके द्विआधारी प्रतिनिधित्व 64 बिट्स लेता है और यह संभव हानि के बिना एक नाव में फिट नहीं कर सकते हैं परिशुद्धता के, इसलिए आप बिना किसी स्पष्ट कलाकार के फ्लोट वैरिएबल को असाइन कर सकते हैं।

दूसरी ओर, यदि आप एक चार चर के लिए एक पूर्णांक चार प्रकार (उदाहरण के 123 के लिए) की सीमा के भीतर शाब्दिक असाइन करते हैं, वहाँ डेटा का कोई नुकसान नहीं है।

कार्य की

दोनों (पूर्णांक चर और डबल चर फ्लोट करने के लिए चार करने के लिए) एक narrowing primitive conversion आवश्यकता होती है।

JLS 5.2 कहते हैं यदि चर के प्रकार बाइट, लघु, या चार है

एक संकुचन आदिम रूपांतरण किया जा सकता है, और निरंतर अभिव्यक्ति के मूल्य चर के प्रकार में प्रदर्शनीय है।

+3

मैं जोड़ता हूं कि '0.3' को बाइनरी फ़्लोटिंग-पॉइंट डब्ल्यू में बिल्कुल प्रतिनिधित्व नहीं किया जा सकता ith * किसी भी * परिशुद्धता का स्तर। –

+1

एक पूर्णांक, कोई फर्क नहीं पड़ता कि कितना छोटा, हमेशा 32 बिट्स द्वारा प्रतिनिधित्व किया जाएगा जबकि एक चरित्र 16 बिट्स द्वारा दर्शाया गया है। तो क्या यहां सटीकता का संभावित नुकसान भी नहीं है? बस तैरने और युगल के मामले में? –

+1

@PiyushSaravagi जो मैंने जेएलएस से जोड़ा उद्धरण देखें। 0 और 2^16-1 के बीच कोई भी अंतर किसी चर के चर के बिना एक चर चर के लिए असाइन किया जा सकता है, क्योंकि int के शीर्ष 16 बिट्स में 0s होंगे, इसलिए उन्हें किसी भी जानकारी को खोए बिना त्याग दिया जा सकता है। – Eran

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