Typumwandlung in C: Typkonvertierung, implizit, explizit mit Beispiel

Was ist Typecasting in C?

Beim Typecasting wird ein Datentyp in einen anderen umgewandelt. In der C-Sprache wird sie auch als Datenkonvertierung oder Typkonvertierung bezeichnet. 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.

Die implizite Typkonvertierung in C erfolgt automatisch, wenn ein Wert in seinen kompatiblen Datentyp kopiert wird. Bei der Konvertierung gelten strenge Regeln für die Typkonvertierung. Wenn die Operanden zwei unterschiedliche Datentypen haben, wird ein Operand mit niedrigerem Datentyp automatisch in einen höheren Datentyp konvertiert. Diese Art der Typkonvertierung ist im Folgenden zu sehenwing Beispiel.

#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 Ganzzahl erstellt promoindem Sie den Wert von „k“ in ASCII konvertieren, bevor Sie die eigentliche Additionsoperation durchführen.

Arithmetische Konvertierungshierarchie

Der Compiler fährt zunächst mit fort promoEin Zeichen in eine Ganzzahl umwandeln. Wenn die Operanden noch unterschiedliche Datentypen haben, werden sie in den höchsten Datentyp konvertiert, der im Folgenden erscheintwing Hierarchiediagramm:

Implizites Typgießen
Arithmetische Konvertierungshierarchie

Betrachten Sie Folgendeswing Beispiel zum Verständnis des Konzepts:

#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 tippe promoProduktion. Im obigen Beispiel können wir auch sagen, dass der Wert von s ist promoted, um eine Ganzzahl einzugeben.
  • 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. weiterverarbeitende Industrie double float rundet die Ziffern auf.
  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 liegt das in der Variablen „result“ gespeicherte Ergebnis nach der an den Variablen var1 und var2 durchgeführten Division im Ganzzahlformat vor. In jedem Fall verliert der in der Variablen „result“ gespeicherte Wert seine Bedeutung, da er den Bruchteil, der normalerweise bei der Division zweier Zahlen entsteht, nicht berücksichtigt.

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

Es erfordert einen Type-Casting-Operator. Die allgemeine Syntax für Typumwandlungsvorgänge 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.
  • Das Konvertieren eines kleineren Datentyps in einen größeren wird auch als Typ bezeichnet promotion.
  • 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 die explizite Typkonvertierung ist ein Typumwandlungsoperator erforderlich.

Beachten Sie Folgendeswing Regeln für die Programmierpraxis beim Umgang mit unterschiedlichen Datentypen, um Datenverlust zu verhindern:

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