Typumwandlung in C: Typkonvertierung, implizit, explizit mit Beispiel

Was ist Typecasting in C?

Typecasting ist die Konvertierung eines Datentyps in einen anderen. In der Programmiersprache C wird es auch Datenkonvertierung oder Typkonvertierung genannt. Es ist eines der wichtigen Konzepte, die in der C-Programmierung eingefรผhrt wurden.

Die C-Programmierung bietet zwei Arten von Typumwandlungsvorgรคngen:

  1. Implizites TypgieรŸen
  2. Explizite Typumwandlung

Implizites TypgieรŸen

Implizite Typumwandlung bedeutet die Konvertierung von Datentypen, ohne dass ihre ursprรผngliche Bedeutung verloren geht. Diese Art der Typumwandlung ist wichtig, wenn Sie Datentypen รคndern mรถchten ohne ร„ndern der Bedeutung der darin gespeicherten Werte Variable.

Implizite Typkonvertierungen in C erfolgen automatisch, wenn ein Wert in seinen kompatiblen Datentyp kopiert wird. Wรคhrend der Konvertierung werden strenge Regeln fรผr die Typkonvertierung angewendet. Wenn die Operanden zwei verschiedene Datentypen haben, wird ein Operand mit einem niedrigeren Datentyp automatisch in einen hรถheren Datentyp konvertiert. Diese Art der Typkonvertierung ist im folgenden Beispiel zu sehen.

#include<stdio.h>
int main(){
	short a=10; //initializing variable of short data type
	int b; //declaring int variable
	b=a; //implicit type casting
	printf("%d\n",a);
	printf("%d\n",b);
}

Ausgang:

10
10

Implizites TypgieรŸen

  1. Im gegebenen Beispiel haben wir eine Variable vom kurzen Datentyp deklariert, deren Wert mit 10 initialisiert wurde.
  2. In der zweiten Zeile haben wir eine Variable vom Datentyp int deklariert.
  3. In der dritten Zeile haben wir der Variablen a den Wert der Variablen s zugewiesen. In der dritten Zeile wird eine implizite Typkonvertierung durchgefรผhrt, indem der Wert der Variablen s, die einen kurzen Datentyp hat, in die Variable a kopiert wird, die einen int-Datentyp hat.

Konvertieren von Zeichen in Int

Betrachten Sie das Beispiel des Hinzufรผgens eines in ASCII dekodierten Zeichens mit einer Ganzzahl:

#include <stdio.h>
main() {
   int  number = 1;
   char character = 'k'; /*ASCII value is 107 */
   int sum;
   sum = number + character;
   printf("Value of sum : %d\n", sum );
}

Ausgang:

 Value of sum : 108

Hier hat der Compiler eine Ganzzahlerhรถhung durchgefรผhrt, indem er den Wert von โ€žkโ€œ in ASCII konvertiert hat, bevor die eigentliche Additionsoperation ausgefรผhrt wurde.

Arithmetische Konvertierungshierarchie

Der Compiler wandelt zunรคchst ein Zeichen in eine Ganzzahl um. Wenn die Operanden immer noch unterschiedliche Datentypen haben, werden sie in den hรถchsten Datentyp konvertiert, der im folgenden Hierarchiediagramm erscheint:

Implizites TypgieรŸen
Arithmetische Konvertierungshierarchie

Betrachten Sie das folgende Beispiel, um das Konzept zu verstehen:

#include <stdio.h>
main() {
   int  num = 13;
   char c = 'k'; /* ASCII value is 107 */
   float sum;
   sum = num + c;
   printf("sum = %f\n", sum );}

Ausgang:

 sum = 120.000000

Zunรคchst wird die c-Variable in eine Ganzzahl konvertiert, aber der Compiler konvertiert num und c in โ€žfloatโ€œ und fรผgt sie hinzu, um ein โ€žfloatโ€œ-Ergebnis zu erzeugen.

Wichtige Punkte zu impliziten Konvertierungen

  • Die implizite Typkonvertierung wird auch als Standardtypkonvertierung bezeichnet. Bei der impliziten Typumwandlung sind weder Schlรผsselwรถrter noch spezielle Anweisungen erforderlich.
  • Die Konvertierung von einem kleineren Datentyp in einen grรถรŸeren Datentyp wird auch als bezeichnet Typ Fรถrderung. Im obigen Beispiel kรถnnen wir auch sagen, dass der Wert von s zum Typ Integer hochgestuft wird.
  • Die implizite Typkonvertierung erfolgt immer mit den kompatiblen Datentypen.

Wir kรถnnen keine implizite Typumwandlung fรผr Datentypen durchfรผhren, die nicht miteinander kompatibel sind, wie zum Beispiel:

  1. Durch die Konvertierung von float in int wird der Bruchteil abgeschnitten, wodurch die Bedeutung des Werts verloren geht.
  2. Bei der Konvertierung von Double in Float werden die Ziffern aufgerundet.
  3. Das Konvertieren von long int in int fรผhrt dazu, dass รผberschรผssige Bits hรถherer Ordnung gelรถscht werden.

In allen oben genannten Fรคllen verliert der Wert bei der Konvertierung der Datentypen seine Bedeutung. Im Allgemeinen wird der Bedeutungsverlust des Werts vom Compiler gewarnt.

'C'-Programmierung bietet eine weitere Mรถglichkeit der Typumwandlung, nรคmlich die explizite Typumwandlung.

Explizite Typumwandlung

Bei der impliziten Typkonvertierung wird der Datentyp automatisch konvertiert. Es gibt einige Szenarien, in denen wir mรถglicherweise eine Typkonvertierung erzwingen mรผssen. Angenommen, wir haben eine Variable div, die die Division zweier Operanden speichert, die als int-Datentyp deklariert sind.

 int result, var1=10, var2=3;
result=var1/var2;

In diesem Fall wird das in der Variable โ€žresultโ€œ gespeicherte Ergebnis nach der Division der Variablen var1 und var2 im Integer-Format vorliegen. Wenn dies geschieht, verliert der in der Variable โ€žresultโ€œ gespeicherte Wert seine Bedeutung, da er den Bruchteil nicht berรผcksichtigt, der normalerweise bei der Division zweier Zahlen entsteht.

Um in solchen Situationen die Typkonvertierung zu erzwingen, verwenden wir die explizite Typumwandlung.

Es ist ein Typumwandlungsoperator erforderlich. Die allgemeine Syntax fรผr Typumwandlungsoperationen lautet wie folgt:

(type-name) expression

Dabei steht:

  • Der Typname ist der Standarddatentyp der Sprache โ€žCโ€œ.
  • Ein Ausdruck kann eine Konstante, eine Variable oder ein tatsรคchlicher Ausdruck sein.

Lassen Sie uns ein Programm schreiben, um zu demonstrieren, wie eine Typumwandlung in C mit expliziter Typumwandlung durchgefรผhrt wird.

#include<stdio.h>
int main()
{
	float a = 1.2;
	//int b  = a; //Compiler will throw an error for this
	int b = (int)a + 1;
	printf("Value of a is %f\n", a);
	printf("Value of b is %d\n",b);
	return 0;
}

Ausgang:

Value of a is 1.200000
Value of b is 2

Explizite Typumwandlung

  1. Wir haben eine Variable โ€žaโ€œ vom Typ float initialisiert.
  2. Als nรคchstes haben wir eine weitere Variable โ€žbโ€œ vom Datentyp โ€žGanzzahlโ€œ. Da die Variablen โ€žaโ€œ und โ€žbโ€œ unterschiedliche Datentypen haben, lรคsst โ€žCโ€œ die Verwendung eines solchen Ausdrucks nicht zu und lรถst einen Fehler aus. In einigen Versionen von โ€žCโ€œ wird der Ausdruck ausgewertet, das Ergebnis ist jedoch unerwรผnscht.
  3. Um solche Situationen zu vermeiden, haben wir die Variable โ€žaโ€œ vom Typ float typisiert. Mithilfe expliziter Typumwandlungsmethoden haben wir Float erfolgreich in den Datentyp Integer konvertiert.
  4. Wir haben den Wert โ€žaโ€œ gedruckt, der immer noch ein Float ist
  5. Nach der Typumwandlung ist das Ergebnis immer eine Ganzzahl โ€žbโ€œ.

Auf diese Weise kรถnnen wir eine explizite Typumwandlung in der C-Programmierung implementieren.

Zusammenfassung

  • Typecasting wird auch als Typkonvertierung bezeichnet
  • Es bedeutet, einen Datentyp in einen anderen umzuwandeln.
  • Die Konvertierung eines kleineren Datentyps in einen grรถรŸeren wird auch als Typpromotion bezeichnet.
  • Es gibt zwei Arten der Typkonvertierung: implizite und explizite Typkonvertierung in C.
  • Die implizite Typkonvertierung erfolgt automatisch, wenn der kompatible Datentyp gefunden wird.
  • Fรผr eine explizite Typkonvertierung ist ein Typumwandlungsoperator erforderlich.

Beachten Sie beim Umgang mit unterschiedlichen Datentypen die folgenden Regeln fรผr die Programmierpraxis, um Datenverlust zu vermeiden:

  • Ganzzahltypen sollten in Float konvertiert werden.
  • Float-Typen sollten in Double-Typen konvertiert werden.
  • Zeichentypen sollten in Ganzzahlen konvertiert werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: