- 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→intsigned char→short→intunsigned char→unsigned short→unsigned intfloat→double
Arithmetische Operationen werden stets auf den Datentypen
int,unsigned intoderdoubledurchgeführt, sofern nicht (mindestens) ein Operand einen größeren Wertebereich (z. B.long intoderlong 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.