C में टाइपकास्टिंग क्या है?
टाइपकास्टिंग एक डेटा टाइप को दूसरे में परिवर्तित कर रहा है। इसे डेटा रूपांतरण या टाइप रूपांतरण भी कहा जाता है। यह 'सी' प्रोग्रामिंग में शुरू की गई महत्वपूर्ण अवधारणाओं में से एक है।
'C' प्रोग्रामिंग दो प्रकार के कास्टिंग ऑपरेशन प्रदान करता है:
- अवैध प्रकार की कास्टिंग
- स्पष्ट प्रकार की कास्टिंग
अवैध प्रकार की कास्टिंग
अंतर्निहित प्रकार की ढलाई का अर्थ है कि अपने मूल अर्थ को खोए बिना डेटा प्रकारों का रूपांतरण। इस प्रकार का टाइपकास्टिंग आवश्यक है जब आप चर के अंदर संग्रहीत मूल्यों के महत्व को बदले बिना डेटा प्रकार बदलना चाहते हैं ।
जब किसी मान को उसके संगत डेटा प्रकार में कॉपी किया जाता है, तो निहित प्रकार रूपांतरण स्वचालित रूप से होता है। रूपांतरण के दौरान, टाइप रूपांतरण के लिए सख्त नियम लागू होते हैं। यदि ऑपरेंड दो अलग-अलग डेटा प्रकारों के होते हैं, तो एक ऑपरेंड कम डेटा प्रकार स्वचालित रूप से एक उच्च डेटा प्रकार में परिवर्तित हो जाता है। इस प्रकार के रूपांतरण को निम्न उदाहरण में देखा जा सकता है।
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
उत्पादन
1010
- दिए गए उदाहरण में, हमने 10 के रूप में आरंभिक मूल्य के साथ लघु डेटा प्रकार का एक चर घोषित किया है।
- दूसरी पंक्ति में, हमने एक अंतर डेटा प्रकार का एक चर घोषित किया है।
- तीसरी पंक्ति पर, हमने चर का मान चर को सौंपा है। तीसरी पंक्ति में निहित प्रकार रूपांतरण को चर s से मूल्य के रूप में प्रदर्शित किया जाता है, जो कि लघु डेटा प्रकार का होता है, जिसे चर में कॉपी किया जाता है, जो एक अंतर डेटा प्रकार का होता है।
चरित्र को इंट में बदलना
एक पूर्णांक के साथ ASCII में डिकोड किए गए वर्ण को जोड़ने के उदाहरण पर विचार करें:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
आउटपुट:
Value of sum : 108
यहां, कंपाइलर ने वास्तविक जोड़ ऑपरेशन करने से पहले ASCII को 'k' का मान परिवर्तित करके एक पूर्णांक प्रचार किया है।
अंकगणित रूपांतरण पदानुक्रम
संकलक पहले एक पूर्णांक के लिए एक चरित्र को बढ़ावा देने के साथ आगे बढ़ता है। यदि ऑपरेंड के पास अभी भी अलग-अलग डेटा प्रकार हैं, तो वे उच्चतम डेटा प्रकार में परिवर्तित हो जाते हैं जो निम्न पदानुक्रम चार्ट में दिखाई देता है:
अवधारणा को समझने के लिए निम्नलिखित उदाहरण पर विचार करें:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
आउटपुट:
sum = 120.000000
सबसे पहले, c वेरिएबल पूर्णांक में परिवर्तित हो जाता है, लेकिन कंपाइलर संख्या और c को "फ्लोट" में परिवर्तित करता है और उन्हें 'फ्लोट' परिणाम उत्पन्न करने के लिए जोड़ता है।
महत्वपूर्ण रूपांतरणों के बारे में महत्वपूर्ण बिंदु
- प्रकार प्रकार के रूपांतरण को मानक प्रकार रूपांतरण भी कहा जाता है। हमें अंतर्निहित प्रकार की कास्टिंग में किसी भी कीवर्ड या विशेष विवरण की आवश्यकता नहीं है।
- छोटे डेटा प्रकार से बड़े डेटा प्रकार में परिवर्तित करने को टाइप प्रमोशन भी कहा जाता है । उपरोक्त उदाहरण में, हम यह भी कह सकते हैं कि s के मान को पूर्णांक टाइप करने के लिए बढ़ावा दिया जाता है।
- निहित प्रकार रूपांतरण हमेशा संगत डेटा प्रकारों के साथ होता है।
हम डेटा प्रकारों पर निहित प्रकार की कास्टिंग नहीं कर सकते हैं जो एक दूसरे के साथ संगत नहीं हैं जैसे:
- फ्लोट को एक इंट में परिवर्तित करने से अंश भाग का क्षय होगा जिससे मूल्य का अर्थ कम हो जाएगा।
- डबल फ़्लोटिंग में बदलने से अंक गोल हो जाएंगे।
- Int को लंबे समय तक int में परिवर्तित करने से अतिरिक्त उच्च क्रम बिट्स के छोड़ने का कारण होगा।
उपरोक्त सभी मामलों में, जब हम डेटा प्रकारों को परिवर्तित करते हैं, तो मूल्य अपना अर्थ खो देगा। आमतौर पर, मूल्य के अर्थ के नुकसान को संकलक द्वारा चेतावनी दी जाती है।
'सी' प्रोग्रामिंग टाइपकास्टिंग का एक और तरीका प्रदान करता है जो स्पष्ट प्रकार की कास्टिंग है।
स्पष्ट प्रकार की कास्टिंग
अंतर्निहित प्रकार रूपांतरण में, डेटा प्रकार स्वचालित रूप से परिवर्तित हो जाता है। ऐसे कुछ परिदृश्य हैं जिनमें हमें टाइप रूपांतरण के लिए मजबूर होना पड़ सकता है। मान लें कि हमारे पास एक चर div है जो दो ऑपरेंड्स के विभाजन को संग्रहीत करता है जिसे एक अंतर डेटा प्रकार के रूप में घोषित किया जाता है।
int result, var1=10, var2=3;result=var1/var2;
इस स्थिति में, चर के बाद var1 और var2 पर किए गए विभाजन के परिणामस्वरूप चर "परिणाम" में संग्रहीत परिणाम पूर्णांक प्रारूप में होगा। जब भी ऐसा होता है, चर "परिणाम" में संग्रहीत मूल्य अपना अर्थ खो देता है क्योंकि यह उस अंश भाग पर विचार नहीं करता है जो सामान्य रूप से दो संख्याओं के विभाजन में प्राप्त होता है।
ऐसी स्थितियों में टाइप रूपांतरण को मजबूर करने के लिए, हम स्पष्ट प्रकार की कास्टिंग का उपयोग करते हैं।
इसके लिए एक प्रकार के कास्टिंग ऑपरेटर की आवश्यकता होती है। टाइप कास्टिंग ऑपरेशन के लिए सामान्य सिंटैक्स निम्नानुसार है:
(type-name) expression
यहाँ,
- प्रकार नाम मानक 'C' भाषा डेटा प्रकार है।
- एक अभिव्यक्ति एक स्थिर, एक चर या वास्तविक अभिव्यक्ति हो सकती है।
आइए हम 'C' में स्पष्ट प्रकार-कास्टिंग के कार्यान्वयन को प्रदर्शित करने के लिए एक प्रोग्राम लिखते हैं।
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}
आउटपुट:
Value of a is 1.200000Value of b is 2
- हमने एक चर 'a' प्रकार की नाव शुरू की है।
- अगला, हमारे पास पूर्णांक डेटा प्रकार का एक और चर 'बी' है। चूंकि चर 'a' और 'b' अलग-अलग डेटा प्रकार के होते हैं, इसलिए 'C' इस तरह की अभिव्यक्ति के उपयोग की अनुमति नहीं देगा और यह एक त्रुटि उत्पन्न करेगा। 'सी' के कुछ संस्करणों में, अभिव्यक्ति का मूल्यांकन किया जाएगा लेकिन परिणाम वांछित नहीं होगा।
- ऐसी स्थितियों से बचने के लिए, हमने टाइप 'ए' प्रकार के फ्लोट को टाइपकास्ट किया है। स्पष्ट प्रकार की कास्टिंग विधियों का उपयोग करके, हमने फ्लोट को डेटा प्रकार पूर्णांक में सफलतापूर्वक बदल दिया है।
- हमने 'a' का प्रिंट मूल्य लिया है जो अभी भी एक फ्लोट है
- टाइपकास्टिंग के बाद, परिणाम हमेशा एक पूर्णांक 'बी' होगा।
इस तरह, हम 'C' प्रोग्रामिंग में स्पष्ट प्रकार की कास्टिंग लागू कर सकते हैं।
सारांश
- टाइपकास्टिंग को टाइप कन्वर्जन भी कहा जाता है
- इसका अर्थ है एक डेटा प्रकार को दूसरे में बदलना।
- छोटे डेटा प्रकार को बड़े में परिवर्तित करने को टाइप प्रमोशन भी कहा जाता है।
- 'सी' प्रकार रूपांतरण का एक स्पष्ट और स्पष्ट तरीका प्रदान करता है।
- संगत डेटा प्रकार मिलने पर इंप्लिकेंट टाइप रूपांतरण स्वचालित रूप से संचालित होता है।
- स्पष्ट प्रकार के रूपांतरण के लिए एक प्रकार के कास्टिंग ऑपरेटर की आवश्यकता होती है।
डेटा हानि से बचाव के लिए विभिन्न डेटा प्रकारों के साथ काम करते समय प्रोग्रामिंग अभ्यास के लिए निम्नलिखित नियमों को ध्यान में रखें:
- इंटीजर प्रकार को फ्लोट में परिवर्तित किया जाना चाहिए।
- फ्लोट प्रकार को डबल में परिवर्तित किया जाना चाहिए।
- चरित्र प्रकारों को पूर्णांक में परिवर्तित किया जाना चाहिए।