2015-12-29 11 views
9

कोड के इस स्निपेट में:प्रकार का कास्टिंग बिंदु क्या है?

c = (char)(c - 'A' + 'a'); 

क्यों हम (char) की ज़रूरत है? उस तरह कास्टिंग सही है?

असाइनमेंट स्टेटमेंट के दाईं ओर c मान लें पूंजी पत्र है। मुझे लगता है कि हम यहां यूनिकोड अतिरिक्त और घटाव कर रहे हैं।

जब गणित एक चार पर किया जाता है, यह पहली पूर्णांक कि यह यूनिकोड प्रणाली में प्रतिनिधित्व में बदल जाती है:

यह जावा पुस्तक है कि मैं पढ़ रहा हूँ से स्निपेट है। वैरिएबल सी से 'ए' घटाना अनिवार्य रूप से पूछता है "ऊपरी-केस अक्षरों में कितना दूर है सी में वर्ण?" 'ए' जोड़ना, फिर उस int को उत्पन्न करता है जो निम्न-केस वर्णमाला के अनुक्रम में दूरी बनाता है चरित्र कोड चारों ओर कास्ट की आवश्यकता है क्योंकि चार के साथ एक विशेष प्रकार का int है जो मूल्यों की एक सीमित सीमा है। कलाकारों का उपयोग करके, प्रोग्रामर स्वीकार करता है कि वह या वह काम की विशेष प्रकृति को समझता है और उम्मीद है मूल्य सही श्रेणी में होना करने के लिए, 0 के माध्यम से 66535.

मैं बिंदु समझ में नहीं आता (char) कास्ट? अगर हम (char) कास्ट का उपयोग नहीं करते हैं तो क्या अलग होगा? अधिक आम तौर पर कास्टिंग क्या है?

+1

सरल शब्दों में: जावा संख्या 8 में एक चरित्र के रूप में लिया जा सकता है और पूर्णांक नहीं .... तो 8 + 8 88 giv कर सकते हैं और नहीं 16 ... के बाद से 8 airthmetic ऑपरेशन के लिए पूर्णांक के रूप में विचार किया जाना चाहिए ,, हम जाति को 'int' –

उत्तर

7

char जावा में एक integral type है, और जब आप अंकगणित को निष्पादित परिणाम है एक int (JLS-4.2.2. Integer Operations का कहना है कि आंशिक रूप से, संख्यात्मक ऑपरेटरों, किस प्रकार int या long के एक मूल्य में परिणाम और उस शामिल नहीं जोड़ता योजक ऑपरेटरों + और -)।

char c = 'A'; 
System.out.printf("'%c' = %d%n", c, (int) c); 
int d = (c - 'A' + 'a'); // c - 65 + 97 
System.out.printf("'%c' = %d%n", (char) d, d); 

और मैं

'A' = 65 
'a' = 97 
+0

के रूप में टाइप करें, मुझे उन स्ट्रिंग स्वरूपों को समझने की आवश्यकता है ... – Jwan622

+1

% एक चर को चिह्नित करता है, सी char के लिए है, दशमलव के लिए डी, nline के लिए n, चर को उसी क्रम में प्रदान किया जाता है जैसे स्ट्रिंग में पैरामीटर के रूप में अंततः। उन चीज़ों की एक सूची के लिए जो आप प्रारूपों में कर सकते हैं, आप https://docs.oracle.com/javase/tutorial/java/data/numberformat.html – HopefullyHelpful

+1

देख सकते हैं इसके अलावा झंडे का उपयोग% और चर प्रकार के बीच किया जा सकता है, उदाहरण के लिए । '% 10d' एक संख्या को प्रारूपित करेगा ताकि इसमें 10 वर्ण (रिक्त स्थान या 0 के साथ भरे हुए) – HopefullyHelpful

7

यह मिल numeric promotion के कारण है। का हवाला देते हुए JLS section 15.18.2: जब संख्यात्मक प्रकार के दो ऑपरेंड के लिए आवेदन किया, ऑपरेंड की राशि उत्पादन

द्विआधारी + ऑपरेटर इसके अलावा प्रदर्शन करती है।

द्विआधारी - ऑपरेटर घटाकर निष्पादन करता है, दो अंकीय ऑपरेशंस के अंतर का उत्पादन करता है।

ऑपरेटिंग (§5.6.2) पर बाइनरी न्यूमेरिक प्रचार किया जाता है।

इस मामले में संख्यात्मक पदोन्नति widening primitive conversion है। section 5.6.2 का हवाला देते हुए:

आदिम रूपांतरण (§5.1.2) के रूप में निम्नलिखित नियमों द्वारा निर्दिष्ट किसी एक या दोनों ऑपरेंड कन्वर्ट करने के लिए लागू किया जाता है चौड़ा:
...

  • अन्यथा, दोनों ऑपरेंड टाइप करने के लिए int बदल रहे हैं।

तो अपने उदाहरण में, char लिए डाली आवश्यक है क्योंकि इसके अलावा एक int मूल्य पर किया जाता है, तो परिणाम प्रकार int की भी है। इसे char में संग्रहीत करने के लिए, आपको एक स्पष्ट कलाकार की आवश्यकता है।

2

आप सभी प्रोग्रामिंग में क्या चर के मान देना है। वे चर विभिन्न प्रकार के हो सकते हैं। अंत में सबकुछ एक संख्या है जिसे एक निश्चित तरीके से या एक अनुक्रम/संख्या के सेट को "इकाई" के रूप में संभाला जाता है। विभिन्न प्रकार के चर अलग-अलग जगह ले सकते हैं।

आप 2 बातें अलग अलग तरीकों से संभाला और अंतरिक्ष के विभिन्न मात्रा में लेने के है, तो आप एक अच्छी तरह से परिभाषित रास्ता 2 चीजों के बीच परिवर्तित करने के लिए की जरूरत है, इस कास्टिंग और ऑपरेटरों द्वारा किया जाता है। एक ऑपरेटर कई इनपुट लेता है और आउटपुट देता है। + और - आमतौर पर 2 इनपुट लेते हैं और 1 वापस देते हैं।

अपने मामले में आप ऑपरेटरों कि वर्ण ले इस्तेमाल किया, उनके बिट्स लेते हैं और उन्हें संख्या के रूप में इस्तेमाल करते हैं और पूर्णांक के रूप में आप जिसके परिणामस्वरूप संख्या लौटने। फिर आपको उस नंबर को मैन्युअल रूप से एक पत्र में कनवर्ट करने की आवश्यकता है, क्योंकि आप संभवतः बाइट खो सकते हैं। यहां तक ​​कि स्पष्ट कलाकार यहां प्रोग्रामर से गलतियों को रोकता है जो संख्याओं को संभालते हैं और गलती से उन्हें एक पत्र में परिवर्तित करते हैं, उन्हें संकलक द्वारा चेतावनी दी जाती है। अंत में यह सभी विनिर्देशों के लिए नीचे आता है जो बताते हैं कि प्रत्येक इनपुट प्रकार और प्रत्येक ऑपरेटर के लिए वास्तव में क्या होता है।

समय कास्टिंग से अधिकांश, आप परिवर्तित प्रकार के एक सहज और आसान रास्ता देने के लिए किया जाता है जब इस तरह के एक तरीका है। अधिकांश बार यह संख्याओं के साथ किया जाता है, क्योंकि केवल अंतर ही बाइट्स (बाइट, शॉर्ट, इंट, लांग) और कभी-कभी आंतरिक गणना (फ्लोट, डबल) प्रदान किया जाता है। इन मामलों में काटने और गोल करना आसान बाइट्स या एक पूर्णांक प्रतिनिधित्व के साथ किसी प्रकार के कास्टिंग करके हासिल करना और हासिल करना आसान है, और बाइट्स को जोड़ना या दशमलव बिंदु में बदलना प्रतिनिधित्व करना बाइट्स या फ्लोटिंग पॉइंट के साथ एक प्रकार के साथ एक प्रकार कास्टिंग करके किया जाता है। प्रतिनिधित्व।

दूसरी ओर जब आप एक अधिक सामान्य मामले के रूप में एक वस्तु का इलाज और एक पूर्वज प्रकार (भी सुपर प्रकार कहा जाता है आदि) के लिए यह कास्ट करना चाहते हैं कई बार कर रहे हैं। उदाहरण के लिए। जब आप ऑब्जेक्ट्स को सॉर्ट करते हैं तो आपको इस बात की परवाह नहीं है कि जब आप एक सॉर्टिंग एल्गोरिदम लिखते हैं तो आप किस सटीक प्रकार से हैंडलिंग कर रहे हैं।

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