C भाषा में टाइप कास्टिंग Type Casting in C

C भाषा में टाइप कास्टिंग Type Casting in C

C भाषा में Type Casting, डेटा टाइप को दूसरे डेटा टाइप में बदलने की प्रक्रिया है। इसे डेटा टाइप के प्रकार को बदलने के लिए कभी-कभी "डेटा टाइप का उत्पादन" भी कहा जाता है।

Type Casting के लिए, बस वह डेटा टाइप नाम लिखते हैं, जिसमें डेटा टाइप को बदला जाना हो, उसके बाद उस डेटा के साथ एक ब्रैकेट लगाते हैं, जिसमें नए डेटा टाइप का नाम दर्ज करते हैं।

यहां एक उदाहरण है जो Type Casting का उपयोग करता है:

int a = 5;
float b = 13.5;
int c;

c = (int) b + a; // typecast float to int before addition
printf("Value of c : %d \n", c);

इस उदाहरण में, float डेटा टाइप को int में कनवर्ट किया जाता है। इसलिए, (int) डेटा टाइप को बदलने के लिए प्रयोग किया जाता है।

C में Type Casting एक ऐसी प्रक्रिया है जिससे एक डेटा टाइप को दूसरे डेटा टाइप में बदला जाता है। Type Casting का उपयोग विभिन्न स्थितियों में किया जाता है, जैसे कि दो विभिन्न डेटा टाइप के वेरिएबल्स के बीच संवाद के लिए, या फिर एक एक्सप्रेशन का वर्गणन या एक्सीक्यूशन करने से पहले इसके डेटा टाइप को बदलने के लिए।

Type Casting को C में दो तरीकों से किया जा सकता है:

Implicit Type Casting: यह कंपाइलर द्वारा स्वचालित रूप से किया जाता है। जब एक एक्सप्रेशन के दोनों ओपरेंड विभिन्न डेटा टाइप के होते हैं तो कंपाइलर डेटा टाइप को प्रथम ओपरेंड के डेटा टाइप के आधार पर सेट कर देता है।

उदाहरण:

int a = 10;
float b = a; //Implicit type casting

यहां, प्रथम लाइन में एक integer वेरिएबल 'a' को 10 के साथ इनिशियलाइज किया जाता है। दूसरी लाइन में, 'b' एक floating-point वेरिएबल है, जिसमें 'a' का मान असाइन किया जाता है। यहां, कंपाइलर स्वचालित रूप से 'a' को float में बदल देता है।

Explicit Type Casting: इसमें, डेटा टाइप को जब हम जानबूझकर एक डेटा टाइप से दूसरे डेटा टाइप में बदलना चाहते हैं तो किया जाता है। यह साफ़ तौर पर उन स्थितियों में काम आता है जब हमें एक विशिष्ट डेटा टाइप की ज़रूरत होती है, लेकिन उपलब्ध डेटा टाइप अलग होता है। यह उन समयों में भी उपयोगी होता है जब हम अनुमानित प्रशंसापत्र में संख्या को स्थानांतरित करना चाहते हैं।

Explicit Type Casting का उपयोग करते हुए, हम डेटा टाइप को इस प्रकार के विवरण द्वारा स्पष्ट रूप से बताते हैं:

(डेटा टाइप) विभिन्न फ़ंक्शन, मान या प्रक्रिया;

उदाहरण के रूप में, यदि हम int को float में बदलना चाहते हैं, तो हम इस प्रकार एक उदाहरण देख सकते हैं:

int num = 10;
float f_num;

f_num = (float) num;

इस उदाहरण में, num को float में बदलने के लिए एक डेटा टाइप के रूप में उसके आगे (float) डाला जाता है।

Integer Promotion

C भाषा में Integer Promotion एक ऐसी प्रक्रिया है जिसमें छोटे आकार (जैसे char या short) के आकार को बड़े आकार (जैसे int या long) के आकार में परिवर्तित किया जाता है। यह प्रक्रिया बाईं ओर से स्वचालित रूप से होती है, अर्थात् यह कंपाइलर द्वारा स्वचालित रूप से किया जाता है।

यह प्रक्रिया आमतौर पर ऐसे समान आकार के ऑपरेशन में उपयोग किए जाने वाले वैद्य वर्गों (जैसे ऑपरेशन में सभी ऑपरेंड्स int होते हैं) के लिए लागू की जाती है।

जैसे, यदि हमारे पास दो char आकार के संख्यात्मक मान हैं, तो जब हम इन्हें एक int आकार के मान में जोड़ते हैं, तो वे आगे बढ़कर int आकार में परिवर्तित हो जाते हैं। इसलिए, जब हम दो char मानों को एक दूसरे के साथ जोड़ते हैं, तो वे स्वचालित रूप से int में परिवर्तित हो जाते हैं, और उसके बाद जोड़ा जाता है।

इस तरह, इंटीजर प्रोमोशन के द्वारा, छोटे आकार के मान को बड़े आकार में उन्नत किया जाता है ताकि ऑपरेशन सही तरीके से काम कर सके।

बात करते हुए, integer promotion एक automatic type conversion process है जो C compiler द्वारा किया जाता है। जब कई अंतर्निहित डेटा types को एक ही expression में combine किया जाता है, तो C compiler automatically उन types को एक ही data type में promote करता है। इसका मुख्य उद्देश्य यह है कि C compiler अच्छी तरह से expressions को evaluate कर सके और एक consistent result दे सके।

  • यदि दो operands के data types में से कम से कम एक operand int, unsigned int, long int, unsigned long int, int8_t, uint8_t, int16_t, uint16_t, int32_t या uint32_t होता है, तो दूसरे operand को भी उसी data type में convert कर दिया जाता है। इस प्रकार, उन्हें एक ही data type में promote कर दिया जाता है।
  • यदि दो operands के data types में से कोई एक operand long double होता है, तो C compiler दूसरे operand को भी long double में convert कर देगा।
  • यदि दो operands के data types में से कोई एक operand double होता है तो दूसरे operand को भी double में convert कर दिया जाता है।
  • यदि दो operands के data types में से कोई एक operand float होता है, तो दूसरे operand को भी float में convert कर दिया जाता है।
  • यदि दो operands के data types char, signed char या unsigned char होते हैं, तो C compiler उन्हें int में convert कर देगा।
  • इस प्रकार, integer promotion उन ऑपरेशन को समझने में मदद करता है जो अलग-अलग data types के operands को combine करते हैं।

Usual Arithmetic Conversion

C भाषा में Usual Arithmetic Conversion एक टाइप कन्वर्शन होती है जो विभिन्न डेटा टाइप के वेरिएबल्स के बीच अंतर्निहित होती है। इसका उद्देश्य दो विभिन्न टाइप के ऑपरेंड को एक ही टाइप के ऑपरेंड में कन्वर्ट करना होता है ताकि वे ऑपरेशन के दौरान संगठित रूप से संचालित हों।

जब दो विभिन्न टाइप के वेरिएबल्स का ऑपरेशन होता है, तो उन्हें समान टाइप के वेरिएबल्स में कन्वर्ट किया जाता है। इस विभिन्न टाइप को टाइप प्रमोशन कहा जाता है। टाइप प्रमोशन के लिए, C स्टैंडर्ड कुछ नियम बनाता है।

Usual Arithmetic Conversion के नियम निम्नलिखित हैं:

  • यदि दोनों ऑपरेंड संख्या हों, तो यह ऑपरेंडर जिसका डेटा टाइप बड़ा होगा, उसके टाइप के रूप में प्रमाणित होगा।
  • यदि एक ऑपरेंड संख्या हो और दूसरा एक फ़्लोट हो, तो इंटीजर ऑपरेंडर को फ़्लोटिंग-पॉइंट टाइप में प्रमाणित किया जाएगा।
  • यदि दोनों ऑपरेंडर फ़्लोट हों तो, अधिक आकार वाले फ़्लोट के रूप में प्रमाणित होंगे।

यदि ऑपरेंडरों के टाइप डेटा के रूप में प्रमाणित करना संभव न हो, तो उनमें से कम डेटा टाइप वाले ऑपरेंडर को बड़े डेटा टाइप में प्रमाणित किया जाता है।

यह नियम इंटीजर और फ़्लोटिंग-पॉइंट डेटा टाइप के बीच अनुचित संयोजनों को जड़ से हल करने में मदद करता है।

Type Casting का उदाहरण 

इस उदाहरण में, हम दो वेरिएबल बनाएँगे, एक int और एक float। फिर हम उन दोनों को एक साथ जोड़ने का प्रयास करेंगे।

#include <stdio.h>

int main() {
    int a = 10;
    float b = 4.5;
    float sum = a + b; // यहां सीधे int और float को जोड़ा जा रहा है
    printf("Sum is %f", sum);
    return 0;
}

जब हम इस कोड को कंपाइल करने की कोशिश करेंगे, हमें निम्न त्रुटि मिलेगी:

main.c:6:17: warning: format specifies type 'double' but the argument has type 'float' [-Wformat]
printf("Sum is %f", sum);
~~ ^~~
%lf
1 warning generated.

यह त्रुटि बताती है कि %f फॉर्मेट विधि float टाइप को अपेक्षित करती है, लेकिन हम उसे double टाइप के साथ पास कर रहे हैं।

यदि हम एक टाइप कास्ट ऑपरेटर ((float)) जोड़ें तो यह त्रुटि दूर हो जाएगी, और हम संख्याओं को सफलतापूर्वक जोड़ पाएंगे।

#include <stdio.h>

int main() {
    int a = 10;
    float b = 4.5;
    float sum = (float)a + b; // यहां a को float में टाइप कास्ट किया गया है
    printf("Sum is %f", sum);
    return 0;
}

यह कोड शुद्ध है और इसे कंपाइल किया जा सकता है। यह "Sum is 14.500000" आउटपुट प्रदर्शित करेगा। इसका कारण है कि यहां इंटीजर वेरिएबल a को फ्लोट में टाइप कास्ट किया जा रहा है। जब दो अलग-अलग डेटा टाइप के वेरिएबल को एक साथ जोड़ा जाता है, तो अधिक मान वाले डेटा टाइप को इनपुट किया जाता है और इसलिए इंटीजर वेरिएबल a को float में टाइप कास्ट किया जाता है। इसके बाद उपर्युक्त नियमों के अनुसार, दो float वेरिएबल को जोड़ा जाता है और उत्तर float में होता है।

Implicit Type Casting का उदाहरण

जब दो अलग-अलग टाइप के डेटा को एक साथ आर्ग्युमेंट के रूप में लिखा जाता है, तो ऑपरेटिंग सिस्टम या कंपाइलर इसे डिफॉल्ट रूप से टाइप कास्ट करता है। यह implicit type casting कहलाता है। निम्नलिखित एक उदाहरण है:

int a = 5;
float b = 2.5;
float sum = a + b;

यहां, एक int और एक float को एक साथ जोड़ा जा रहा है और ऑपरेटिंग सिस्टम इसे implicit रूप से type cast कर देगा ताकि यह समीकरण सफल हो सके।

Explicit Type Casting का उदाहरण
जब हम डेटा को उद्देश्यपूर्वक टाइप कास्ट करना चाहते हैं, तो हम explicit type casting का उपयोग करते हैं। निम्नलिखित कुछ उदाहरण हैं:

float a = 3.14;
int b = (int) a;

यहां, float टाइप के डेटा को int टाइप में टाइप कास्ट किया गया है। इससे float के दशमलव का भाग छोड़ दिया जाएगा और केवल पूर्णांक ही बचेंगे।

char a = 'A';
int b = (int) a;

इस उदाहरण में, एक char टाइप को int टाइप में टाइप कास्ट किया गया है

सामान्य अंकगणितीय रूपांतरण (Usual Arithmetic Conversion)

सामान्य अंकगणितीय रूपांतरणों को उनके मूल्यों को एक सामान्य प्रकार में डालने के लिए निहित रूप से किया जाता है। कंपाइलर पहले पूर्णांक प्रचार करता है, यदि ऑपरेंड के अभी भी अलग-अलग प्रकार हैं, तो वे उस प्रकार में परिवर्तित हो जाते हैं जो निम्न पदानुक्रम (hierarchy) में उच्चतम दिखाई देता है: