Was ist Typecasting in C?
Beim Typecasting wird ein Datentyp in einen anderen konvertiert. Es wird 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 Typgussvorgängen:
- Implizites Typgießen
- Explizites Typgießen
Implizites Typgießen
Implizites Typ-Casting bedeutet die Konvertierung von Datentypen, ohne die ursprüngliche Bedeutung zu verlieren. Diese Art der Typumwandlung ist wichtig, wenn Sie Datentypen ändern möchten, ohne die Bedeutung der in der Variablen gespeicherten Werte zu ändern .
Die implizite Typkonvertierung erfolgt 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 dargestellt.
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
Ausgabe
1010
- Im angegebenen Beispiel haben wir eine Variable vom Typ kurzer Datentyp mit dem als 10 initialisierten Wert deklariert.
- In der zweiten Zeile haben wir eine Variable eines int-Datentyps deklariert.
- 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, wenn der Wert aus der Variablen s, die vom kurzen Datentyp ist, in die Variable a kopiert wird, die vom int-Datentyp ist.
Zeichen in Int konvertieren
Betrachten Sie das Beispiel des Hinzufügens eines in ASCII dekodierten Zeichens mit einer Ganzzahl:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Ausgabe:
Value of sum : 108
Hier hat der Compiler eine Ganzzahl-Heraufstufung durchgeführt, indem er den Wert von 'k' in ASCII konvertiert hat, bevor die eigentliche Additionsoperation ausgeführt wird.
Arithmetische Konvertierungshierarchie
Der Compiler fährt zunächst mit der Heraufstufung eines Zeichens zu einer Ganzzahl fort. Wenn die Operanden immer noch unterschiedliche Datentypen haben, werden sie in den höchsten Datentyp konvertiert, der im folgenden Hierarchiediagramm angezeigt wird:
Betrachten Sie das folgende Beispiel, um das Konzept zu verstehen:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Ausgabe:
sum = 120.000000
Zunächst wird die Variable c in eine Ganzzahl konvertiert, aber der Compiler konvertiert num und c in "float" und fügt sie hinzu, um ein 'float'-Ergebnis zu erzielen.
Wichtige Punkte zu impliziten Konvertierungen
- Die implizite Typkonvertierung wird auch als Standardtypkonvertierung bezeichnet. Wir benötigen keine Schlüsselwörter oder speziellen Anweisungen für implizites Typ-Casting.
- Das Konvertieren von einem kleineren Datentyp in einen größeren Datentyp wird auch als Typheraufstufung bezeichnet . Im obigen Beispiel können wir auch sagen, dass der Wert von s zum Typ Integer heraufgestuft wird.
- Die implizite Typkonvertierung erfolgt immer mit den kompatiblen Datentypen.
Wir können keine implizite Typumwandlung für die Datentypen durchführen, die nicht miteinander kompatibel sind, wie z.
- Wenn Sie float in ein int konvertieren, wird der Bruchteil abgeschnitten, wodurch die Bedeutung des Werts verloren geht.
- Wenn Sie double in float umwandeln, werden die Ziffern gerundet.
- Das Konvertieren von long int in int führt zum Löschen überschüssiger Bits höherer Ordnung.
In allen oben genannten Fällen verliert der Wert beim Konvertieren der Datentypen seine Bedeutung. Im Allgemeinen wird der Compiler vor dem Bedeutungsverlust des Werts gewarnt.
Die C-Programmierung bietet eine andere Art der Typumwandlung, nämlich das explizite Typumwandeln.
Explizites Typgießen
Bei der impliziten Typkonvertierung wird der Datentyp automatisch konvertiert. Es gibt einige Szenarien, in denen wir möglicherweise die 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 für die Variablen var1 und var2 durchgeführten Division in einem ganzzahligen Format vor. In jedem Fall verliert der in der Variablen "Ergebnis" gespeicherte Wert seine Bedeutung, da der Bruchteil, der normalerweise bei der Division zweier Zahlen erhalten wird, nicht berücksichtigt wird.
Um die Typkonvertierung in solchen Situationen zu erzwingen, verwenden wir explizites Typumwandeln.
Es erfordert einen Typgussoperator. Die allgemeine Syntax für Typumwandlungsvorgänge lautet wie folgt:
(type-name) expression
Hier,
- Der Typname ist der Standarddatentyp der C-Sprache.
- Ein Ausdruck kann eine Konstante, eine Variable oder ein tatsächlicher Ausdruck sein.
Schreiben wir ein Programm, um die Implementierung des expliziten Typ-Castings in 'C' zu demonstrieren.
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}
Ausgabe:
Value of a is 1.200000Value of b is 2
- Wir haben eine Variable 'a' vom Typ float initialisiert.
- Als nächstes haben wir eine andere Variable 'b' vom ganzzahligen Datentyp. Da die Variablen 'a' und 'b' unterschiedliche Datentypen haben, lässt 'C' die Verwendung eines solchen Ausdrucks nicht zu und führt zu einem Fehler. In einigen Versionen von 'C' wird der Ausdruck ausgewertet, das Ergebnis ist jedoch nicht erwünscht.
- Um solche Situationen zu vermeiden, haben wir die Variable 'a' vom Typ float typisiert. Durch die Verwendung expliziter Typumwandlungsmethoden haben wir float erfolgreich in eine Datentyp-Ganzzahl konvertiert.
- Wir haben den Wert 'a' gedruckt, der immer noch ein Float ist
- Nach der Typumwandlung ist das Ergebnis immer eine Ganzzahl 'b'.
Auf diese Weise können wir explizites Typ-Casting in der C-Programmierung implementieren.
Zusammenfassung
- Typecasting wird auch als Typkonvertierung bezeichnet
- Dies bedeutet, dass ein Datentyp in einen anderen konvertiert wird.
- Das Konvertieren eines kleineren Datentyps in einen größeren wird auch als Typwerbung bezeichnet.
- 'C' bietet eine implizite und explizite Möglichkeit zur Typkonvertierung.
- Die implizite Typkonvertierung wird automatisch ausgeführt, wenn der kompatible Datentyp gefunden wird.
- Für die explizite Typkonvertierung ist ein Typumwandlungsoperator erforderlich.
Beachten Sie die folgenden Regeln für die Programmierpraxis, wenn Sie mit unterschiedlichen Datentypen arbeiten, um Datenverlust zu vermeiden:
- Ganzzahlentypen sollten in float konvertiert werden.
- Float-Typen sollten in Double konvertiert werden.
- Zeichentypen sollten in Ganzzahlen konvertiert werden.