Typkonvertierung

Die Typkonvertierung beschreibt die Umwandlung von einem Datentyp in einen anderen. Diese kann implizit durch den Compiler oder explizit durch den Programmierer durchgeführt werden. Eine Konvertierung sollte möglichst nur von kleineren zu größeren Datentypen erfolgen, um Datenverlust zu vermeiden.

Implizite Typkonvertierung

Die implizite Typkonvertierung wird durch den Compiler durchgeführt und ist im Quellcode nicht direkt sichtbar.

void main() {

	double d = 5;	// Implizite Typkonvertierung von int zu double
	double e = 5.0;	// Keine Typkonvertierung, da bereits double
}

Werden zwei Variablen mit unterschiedlichen Datentypen verknüpft, so enthält das Ergebnis immer den genaueren Datentyp. Wenn zum Beispiel int und float addiert werden, so ist das Ergebnis immer vom Typ float.

Werden Gleitkommazahlen in Ganzzahlen konvertiert, so werden sie nicht automatisch gerundet, sondern der Nachkommaanteil abgeschnitten!

void main() {

	double d = 1.89;
	int i;

	i = d;	// i=1
}

Gleitkommaliterale wie z.B. 1.23 oder 1e5 besitzen immer den Datentyp double. Daher erzeugt float f=1.23; eine Compilerwarnung, weil der Typ von double auf float konvertiert werden muss und die Gefahr eines Datenverlusts besteht. Um dies zu vermeiden, kann float f=1.23f; geschrieben werden.

void main() {

	float f = 1.23; 	// Typkonvertierung von double auf float
	float e = 1.23f;	// Keine Typkonvertierung, da bereits float
	
} 

Da char intern durch Zahlen dargestellt wird, ist char c='Z'; auch eine implizite Typkonvertierung.

Explizite Typkonvertierung

Die explizite Typkonvertierung muss durch den Programmierer angegeben werden und ist daher im Code sichtbar. Dazu wird in Klammern der gewünschte Zieldatentyp angegeben. Den Vorgang der expliziten Typkonvertierung nennt man auch Casten.

void main() {

	float f = 1.3f;
	
	int i = (int)f;	// Explizite Typkonvertierung
	
}

Es ist guter Stil implizite Konvertierungen explizit anzugeben!

Literatur

C-HowTo: Typumwandlung

Interaktiv

C Programming Quiz: Typecasting