Type Casting in C : Automatic V/s Manual, Implicit V/s Explicit

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Type Casting in C: Computer में विभिन्न Data Types के मानों को Store करके Process किया जाता है। विभिन्न प्रकार के मानों के साथ प्रक्रिया करते समय कई बार ऐसी स्थितियां पैदा हो जाती हैं, जिसमें किसी एक Data Type के मान को किसी दूसरे Data Type के मान में Convert करके किसी Calculation को Perform करना होता है।

इस प्रकार की स्थितियों से निपटने के लिए “C” Language हमें दो तरह से Type Conversion Mechanism Provide करता है, जिसके आधार पर हम एक प्रकार के मान को दूसरे Type के मान में Convert करके अपनी Requirement को पूरा करते हैं। ये दोनों तरीके निम्नानुसार हैं:

Automatic Type Conversion

“सी” भाषा में विभिन्न प्रकार के Variables व Constant की Mixing कर सकते हैं, लेकिन  Execution के समय ये Expressions एक विशेष नियम का पालन करते हैं। हम जानते हैं कि Expressions में Compiler दो या दो से अधिक Operands के साथ क्रिया करके एक Operand में उसके मान को Store करता है। यदि Operand अलग-अलग Data Type के हों तो Lower Type का Operand Upper Type के Operand में बदल जाता है और Result हमेंशा Higher Type का प्राप्त होता है। इस सम्बंध में “सी” कुछ नियमों का पालन करता है जो निम्नानुसार है:

  • सभी shortchar प्रकार के Variables Automatically int प्रकार में Convert हो जाते हैं।
  • यदि एक Operand Long Double प्रकार का हो तो Execution के दौरान दूसरा Operand भी Long Double प्रकार के Operand में Convert हो जाता है और Result Long Double प्रकार का प्राप्त होता है।
  • यदि एक Operand Double प्रकार का हो तो दूसरा भी Double में Convert हो जाता है और Result Double प्रकार का प्राप्त होता है।
  • यदि एक Operand Float प्रकार का हो तो दूसरा भी Float प्रकार में बदल कर Output Float प्रकार का प्राप्त होता है।
  • यदि एक Operand unsigned long int है तो दूसरा भी unsigned long int में Convert हो जाएगा और Result unsigned long int में ही प्राप्त होता है।
  • long int में बदल कर long int का Result प्राप्त किया जा सकता है या फिर दोनों Operand unsigned long int में बदल जाएंगे व Result unsigned long int में प्राप्त होगा।
  • यदि एक Operand unsigned long int है तो दूसरा भी unsigned में बदल कर Result unsigned int में प्राप्त होगा।

Assignment Operator के Left Side में जिस प्रकार के Data Type का Variable होता है, Expression उसी प्रकार का Data Return करेगा। उदाहरण से समझें तो माना तीन वेरियेबल्स~ क्रमश: int, longdouble प्रकार के हैं:

      int  a;
      long b;
      double c;

अब यदि a = b * c; Expression Use करें तो b का मान long से double Type के Data में Convert हो जाएगा व प्राप्त मान a में Store हो जाएगा। लेकिन a int प्रकार का है इसलिए a में केवल पूर्णांक मान ही Store होगा ना कि double प्रकार का क्योंकि int प्रकार का Identifier केवल पूर्णांक ही Store कर सकता है। इसलिए किसी भी Expression का Final Result Expression के Left Side के Identifier के Data Type पर निर्भर रहता है।

 

Manual Type Conversion OR Casting

जब हमें विशेष प्रकार की गणनाएं करनी होती है, तब हम Automatic Type Conversion का प्रयोग नहीं कर सकते हैं। ऐसे में हमें विशेष प्रकार से Type Conversion करना पडता है। इस प्रकार से किसी Expression में किसी Identifier के Declare किये गए Data Type को बदल कर नए Data Type में Convert करके गणना करते हैं। इस प्रकार के Conversion को Casting करना कहते हैं।

किसी Variable के Data Type को किसी दूसरे Data Type में Convert करके Calculation Perform करने के लिए हमें उस Variable से पहले उस Data Type को Specify करना होता है, जिसमें Variable के मान को Convert करना है। उदाहरण के लिए निम्न Program देखिए:

Program
#include<stdio.h>
main()
{
	int a = 15, b = 2;
	float c;

	c = a/b;

	printf(“C is %f “,c);
	getch();
}

इस Program को जब Run किया जाता है, तब हमें Output में 7.000000 मान प्राप्त होता है, जबकि हमें 7.500000 मान प्राप्त होना चाहि,। ऐसा इसलिए होता है, क्योंकि Variable a b दोनों ही Integer प्रकार के हैं। हालांकि Variable c एक Float प्रकार का Variable है, लेकिन फिर भी ये Variable वही मान Store कर सकता है, जो मान a/b Expression से Generate होता है और a b दोनों ही Integer होने की वजह से दसमलव वाला मान 7.5 Generate नहीं कर सकते हैं, इसलिए Variable c में Store होने वाला Resultant मान 7 ही होता है, जो एक Float प्रकार के Variable में Store होने की वजह से 7.000000 में Convert हो जाता है।

Variable c में 7.5 तभी Store हो सकता है, जब a या b में से कोई Float प्रकार का हो। इस प्रकार की स्थिति में हमें इस Expression के लिए a या b में से किसी एक Variable के मान को Float में Convert करना जरूरी होता है।

किसी Variable के मान को किसी एक Expression के लिए एक Type से दूसरे Type में Convert करने के लिए हमें उस Variable की Manual Casting करनी पडती है और किसी Variable की Casting करने के लिए हमें उस Variable से पहले Braces के बीच में उस Data Type को Specify करना होता है, जिस Data Type में हम उस Variable के मान को Change करना चाहते हैं। पिछले Program के आधार पर इस प्रक्रिया को हम निम्नानुसार समझ सकते हैं:

      c = (float)a / b;

पिछले Program में जब हम इस Statement को पहले लिखे गए Statement से Replace करते हैं, तो Output में हमें Variable c का मान 7.5000000 प्राप्त होता है। ऐसा इसलिए होता है, क्योंकि इस Statement के Execute होने से पहले Variable a जो कि Integer प्रकार का है, Float प्रकार के मान में Convert हो जाता है।

चूंकि कभी भी दो अलग प्रकार के Variables के बीच किसी प्रकार की Calculation Perform नहीं होती है, इसलिए जब Integer प्रकार के Variable a को Float प्रकार में Convert कर दिया जाता है, तब Integer प्रकार का दूसरा Variable b की भी Automatic Type Casting होती है और वह भी Float प्रकार के मान में Convert हो जाता है। अब a b दोनों Float प्रकार के मान के आधार पर Calculation Perform करते हैं, जिससे Float प्रकार का मान 7.5 Generate होता है।

Assignment Operator इस मान 7.5 को Variable c में Store कर देता है और जब हम Variable c के मान को Screen पर Display करते हैं, तब हमें Variable c का मान 7.5000000 प्राप्त होता है। यदि हम चाहें तो उपरोक्त Statement को निम्नानुसार भी लिख सकते हैं:

      c = a / (float) b;

Statement को इस तरह से लिखने पर भी Program के Output पर कोई फर्क नहीं पडता है और हमें वही Output प्राप्त होता है, जो पिछले Statement का प्राप्त होता है। Modified Program को हम निम्नानुसार लिख सकते हैं:

Program
#include<stdio.h>
main()
{
	int a = 15, b = 2;
	float c;
	c = (float) a / b;
	printf(“C is %f “,c);
}
Precedence of Operators in C Language
Function Arguments: Calling Function V/s Called Function

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।