- Promotion (Typumwandlung)
-
Als Promotion (auch eingedeutscht als Aufweitung) bezeichnet man in einigen Programmiersprachen eine bestimmte Art von automatischen Typumwandlungen, die zur Vereinfachung von (meist) arithmetischen Operationen durchgeführt werden.
C und C++
In C und C++ werden nur die folgenden Typumwandlungen als Promotion bezeichnet.
bool
→int
(nur C++, in C99 entsprechend für_Bool
)char
→int
signed char
→short
→int
unsigned char
→unsigned short
→unsigned int
float
→double
Arithmetische Operationen werden stets auf den Datentypen
int
,unsigned int
oderdouble
durchgeführt, sofern nicht (mindestens) ein Operand einen größeren Wertebereich (z. B.long int
oderlong double
) aufweist. Dies ist sinnvoll, so Datentypen benutzt werden, die an die Wortbreite des Prozessors angepasst sind und deshalb Berechnungen mit diesen Datentypen in der Regel am schnellsten sind.Beispiel:
unsigned char bytes[] = { 0xBE, 0xEF } ; unsigned int w = (bytes[0] << 8) + bytes[1]; /* w bekommt den Wert 0xBEEF */
Dieser Code funktioniert nur, weil die Bitschiebe-Operation << bereits auf (mind. 16 Bit fassendem) unsigned int durchgeführt wird.
Funktionsparameter, die an eine Funktion ohne Funktionsprototypen (nur K&R C) oder als Teil einer Ellipse übergeben werden, werden stets „aufgeweitet“ übergeben. So bekommt die Funktionprintf()
aus der C-Standardbibliothek im folgenden Beispiel nach dem Formatstring 3int
-Argumente übergeben:char c = '$'; short x = 4711; short y = -23; printf("Das Zeichen ist %c, die Koordinaten sind (%hd,%hd).", c, x, y);
Zeigertypen werden nicht aufgeweitet, so wird ein
short*
(Zeiger aufshort
) nicht in einenint*
(Zeiger aufint
) aufgeweitet.
Wikimedia Foundation.