| #include <pronix.de> |
|
|
In diesem Kapitel erfahren Sie, wie in C bestimmte Datentypen in andere konvertiert werden und wie Sie dies selbst beeinflussen können.
Bei beiden Vorgehensweisen wird vorausgesetzt, dass der Compiler eine Typenumwandlung auch wirklich unterstützt. Die Syntax einer expliziten Typenumwandlung sieht folgendermaßen aus: (typ) ausdruck; Es wird dabei zuerst der ausdruck ausgewertet, und anschließend wird dieser Wert in einen Datentyp typ umgewandelt.
Ein Beispiel zum impliziten und zum expliziten Type-Casting: #include <stdio.h>
int main()
{
int x=5,y=2;
float z;
z = x / y;
printf("%f\n",z); /*=2.000000*/
z = (float)x / (float)y; /*=2.500000*/
printf("%f\n",z);
return 0;
}
Die erste Berechnung z = x / y; gibt das Ergebnis "2.000000" aus. Das ist leicht nachvollziehbar, denn es werden zwei int-Werte dividiert. int-Werte können keinen Wert nach dem Komma darstellen. Dass hier das Ergebnis dennoch vom Typ float ist, verdanken Sie dem impliziten Type-Casting des Compilers. z = (float)x / (float)y; konvertiert die beiden Datentypen int explizit in float-Typen. Deshalb erhalten Sie als Ergebnis "2.500000" zurück. z = (float)x / y; /* Ergebnis = 2.50000 */ Aber Achtung, falls Sie vorhaben, Gleitkommazahlen in Ganzzahlen umzuwandeln, etwa folgendermaßen: long x; float z=5.5; x=(long)z; Hier wird der Wert nach dem Komma abgeschnitten. Falls Sie einen Wert umwandeln wollen, der größer als seine Zielgruppe ist, liegt ein undefiniertes Verhalten vor. Wird z.B. ein float-Wert in einen short-Wert konvertiert, könnte das zu Problemen führen, denn der float-Wert hat eine Größe von vier Bytes und der short-Wert eine von zwei Bytes. Mit niedrigeren Werten mag dies zufällig funktionieren: short x; float z=25.0; x=(short)z; Sollte der Wert von float z.B. "1000000.0" betragen, wird dies nicht mehr gelingen, denn der Wert "1000000" ist nicht mehr mit 16 Bit (= 2 Bytes) darstellbar. Das Gleiche gilt auch für Casts von double nach float oder long double nach double.
Weiter mit Kapitel 11: Kontrollstrukturen
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
© 2000 - 2003 Jürgen Wolf |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||