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
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