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

Hier

  • 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.