06.10.2013 Aufrufe

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

7.7 Typumwandlungen<br />

<strong>E<strong>in</strong>e</strong> Typumwandlung bewirkt, dass der Wert e<strong>in</strong>es Ausdrucks e<strong>in</strong>en neuen Typ erhält. Dies ist nur<br />

für skalare Typen möglich, also für arithmetische Typen <strong>und</strong> Zeiger. Die Typumwandlung wird<br />

stets so durchgeführt, dass der Wert erhalten bleibt, sofern der Wert mit dem neuen Typ darstellbar<br />

ist.<br />

<strong>E<strong>in</strong>e</strong> Typumwandlung kann implizit se<strong>in</strong>, d.h. sie wird vom Compiler automatisch vorgenommen,<br />

oder explizit, d.h., sie wird durch <strong>die</strong> Anwendung des Cast-Operators erzwungen.<br />

7.7.1 Implizite Typumwandlung<br />

7.7.1.1 Ganzzahlige Erweiterung<br />

Operanden vom Typ _Bool, char, unsigned char, short, unsigned short oder Bitfelder<br />

können <strong>in</strong> e<strong>in</strong>em Ausdruck überall dort benutzt werden, wo Operanden vom Typ <strong>in</strong>t oder<br />

unsigned <strong>in</strong>t zulässig s<strong>in</strong>d. Für <strong>die</strong>se Operanden wird stets <strong>die</strong> ganzzahlige Erweiterung durchgeführt,<br />

d.h. sie werden zu <strong>in</strong>t bzw. unsigned <strong>in</strong>t erweitert.<br />

Ist etwa c e<strong>in</strong>e char-Variable, wird im Ausdruck: c + ’0’ der Wert von c (ASCII-Code von 'c')<br />

vor der Addition zu <strong>in</strong>t erweitert.<br />

7.7.1.2 Übliche arithmetische Typumwandlungen<br />

Die Operanden e<strong>in</strong>es b<strong>in</strong>ären (zweistelligen) Operators dürfen unterschiedliche skalare Typen besitzen.<br />

Durch Anwendung der Üblichen arithmetischen Typumwandlungen wird implizit e<strong>in</strong> geme<strong>in</strong>samer<br />

Typ gebildet.<br />

Beispiel:<br />

long double<br />

double<br />

float<br />

unsigned long long<br />

long long<br />

unsigned long<br />

long<br />

unsigned <strong>in</strong>t<br />

<strong>in</strong>t<br />

<strong>in</strong>t a = 5; long l = 4L; float f = 3.14f; double d = 2.0;<br />

/* Wo wird mit welchem Typ gerechnet? */<br />

a = a * l + a * f * d;<br />

Dazu wird <strong>die</strong> ganzzahlige Erweiterung ausgeführt,<br />

treten danach noch Operanden mit<br />

verschieden Typen auf, wird <strong>in</strong> den Typ desjenigen<br />

Operators umgewandelt, der <strong>in</strong> der<br />

nebenstehenden Hierarchie am weitesten<br />

oben steht. Das Ergebnis ist ebenfalls von<br />

<strong>die</strong>sem Typ.<br />

Bei der Zuweisung wird der rechte Operand<br />

immer <strong>in</strong> den Typ des l<strong>in</strong>ken Operanden umgewandelt.<br />

Dabei werden überzählige (Nachkomma-)<br />

Stellen oder höherwertige Bits <strong>die</strong><br />

nicht mehr Platz haben, e<strong>in</strong>fach abgeschnitten,<br />

es wird nicht ger<strong>und</strong>et. Wenn der Orig<strong>in</strong>alwert<br />

im neuen Typ nicht mehr darstellbar<br />

ist, f<strong>in</strong>det e<strong>in</strong> Überlauf statt, das Ergebnis hat<br />

mit dem Orig<strong>in</strong>alwert meist nicht mehr viel<br />

geme<strong>in</strong>. (Ke<strong>in</strong>e Sättigung).<br />

Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 28/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!