ein Kapitel zurück                                           ein Kapitel weiter

Nun möchte ich euch die Funktion und Nutzen des cast-Operators erklären. Mit dem cast-Operator können wir den Typen den das Ergebnis haben soll casten. Hierzu wieder unserer Beispiel...

/*Download:cast.c*/
#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. Das ist auch ganz logisch den es werden zwei 'int'-Werte miteinander dividiert. Und diese können nun mal keinen Wert nach dem Komma darstellen.

Die nächste Berechnung...


z = (float)x / (float)y;

wandelt die beiden Variablentypen 'int' in einen 'float'-Typen um. Und deshalb kommt als Ergebnis 2.500000 heraus.

Wichtig ist dabei das 'x' und 'y' für das weiter Programm weiterhin vom Variablentyp 'int' sind. Dieses casten des Variablentyp ist nur während dieser einen Ausführung gültig. 'int' bleibt also 'int'.

Durch die Lektion die sie ein Kapitel zuvor gelernt haben wissen sie das es auch gereicht hätte nur einen dieser beiden Typen zu casten den wenn man zwei Verschieden Variablen miteinander durch Operatoren verknüpft bekommen sie das Ergebnis des genaueren Typs dieser beiden Variablen...


z = (float)x / y;

Aber Achtung falls sie vorhaben Gleitkommazahlen in Ganzahlen zu casten a la...

..........
long x;
float z=5.5;
x=(long)z;
..........


...wird der Wert nach dem Komma abgeschnitten. Falls sie einen Wert casten der Größer als seine Zielgruppe ist liegt ein undefiniertes Verhalten vor. Wenn sie z.B. einen float-Wert in einen int-Wert casten wollen kann das schief gehen, den der float-Wert hat eine Größe von 4 Bytes und der int-Wert hat die Größe von 2 Bytes(auf 16 Bit-Maschinen). Das mag jetzt mit niedrigeren Werten zufällig funktionieren wie z.B.....

..........
int x;
float z=25.0;
x=(int)z;
..........


Aber wenn der Wert von float z.B. 1000000.0 beträgt wird es nicht mehr gehen, den der Wert 1000000 ist nicht mehr mit 16 Bit = 2 Bytes darstellbar. Dasselbe gilt übrigens auch für castings wie double zu float oder long double zu double usw.

Das heißt nun das wir ohne Bedenken kleiner Datentypen in größere, aber nicht größere Datentypen in kleinere casten sollten.

Des weiteren ist es Empfehlenswert auch dann Castings durchzuführen wenn es nicht unbedingt nötig ist. z.B.:

int i=100;
float j;

j=i;


In diesem Beispiel wäre ein Casting nicht unbedingt nötig. Aber wenn bei einem größeren Programm z.B. in Zeile 500 der Variable j den Wert von der Variablen i zuweisen wollen, kann dies leicht passieren das sie schon vergessen haben um welchen Datentyp es sich bei der Variablen j und i eigentlich handelt. Und da sollten sie der Übersichtlichkeit und Lesbarkeit des Codes zuliebe die Schreibweise mit dem Casting bevorzugen....

j=(float)i;

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf