C-Programmierung: Typumwandlung
Der Typ eines Wertes kann sich aus verschiedenen Gründen ändern müssen. Beispielsweise, weil man unter Berücksichtigung höherer Genauigkeit weiter rechnen möchte, oder weil man den Nachkomma-Teil eines Wertes nicht mehr benötigt. In solchen Fällen verwendet man Typumwandlung (auch als Typkonvertierung bezeichnet).
Man unterscheidet dabei grundsätzlich zwischen expliziter und impliziter Typumwandlung. Explizite Typumwandlung nennt man auch Cast.
Eine Typumwandlung kann einschränkend oder erweiternd sein.
Implizite Typumwandlung
BearbeitenBei der impliziten Typumwandlung wird die Umwandlung nicht im Code aufgeführt. Sie wird vom Compiler automatisch anhand der Datentypen von Variablen bzw. Ausdrücken erkannt und durchgeführt. Beispiel:
int i = 5;
float f = i; // implizite Typumwandlung
Offenbar gibt es hier kein Problem. Unsere Ganzzahl 5 wird in eine Gleitkommazahl umgewandelt. Dabei könnten die ausgegebenen Variablen zum Beispiel so aussehen:
5 5.000000
Die implizite Typumwandlung (allgemeiner Erweiternde Typumwandlung) erfolgt von kleinen zu größeren Datentypen.
Explizite Typumwandlung
BearbeitenAnders als bei der impliziten Typumwandlung wird die explizite Typumwandlung im Code angegeben. Es gilt folgende Syntax:
(Zieltyp)Ausdruck
Wobei Zieltyp der Datentyp ist, zu dem Ausdruck konvertiert werden soll. Beispiel:
float pi = 3.14159f;
int i = (int)pi; // explizite Typumwandlung
liefert i=3.
Die explizite Typumwandlung entspricht allgemein dem Konzept der Einschränkenden Typumwandlung.
Verhalten von Werten bei Typumwandlungen
BearbeitenFassen wir zusammen. Wandeln wir int
in float
um, wird impliziert erweitert, d. h. es geht keine Genauigkeit verloren.
Haben wir eine float
nach int
Umwandlung, schneidet der Compiler die Nachkommastellen ab - Genauigkeit geht zwar verloren, aber das Programm ist in seiner Funktion allgemein nicht beeinträchtigt.
Werden allgemein größere in kleinere Ganzzahltypen umgewandelt, werden die oberen Bits abgeschnitten (es erfolgt somit keine Rundung!). Würde man versuchen einen Gleitpunkttyp in einen beliebigen Typ mit kleineren Wertebereich umzuwandeln, ist das Verhalten unbestimmt.