Implizite Typumwandlung?
-
Hi,
folgender Code:unsigned char c1 = 155; unsigned char c2 = 175; unsigned char c3 = (c1 + c2) / 2; cout << static_cast<int>(c3) << endl;Frage1: Warum wird hier 165 ausgegeben? Ich wuerde erwarten, c1 + c2 ergibt erst einmal einen Ueberlauf (da groesser als 255) und anschliessend 75. Werden chars implizit in einen groesseren Typ umgewandelt?
Frage2: Ist dieses Verhalten garantiert? Oder muss ich sowas schreiben, um stets auf meine 165 zu kommen:
unsigned char c3 = (static_cast<unsigned int>(c1) + c2) / 2;?
Danke fuer eure Antworten.
-
DeSoVoDaMu schrieb:
Werden chars implizit in einen groesseren Typ umgewandelt?
Stichwort: usual integral promotions
Die Operanden werden in int (oder, auf einer exotischen Maschine mit sizeof(char)==sizeof(int): unsigned int; abstrakt: der kleinste Typ ab int aufwärts, der alle Werte des Originaltyps darstellen kann) umgewandelt, das Ergebnis der Addition hat dann ebenfalls diesen Typ. Da int wenigstens 16bit hat, kann hier mit diesen Werten kein Überlauf entstehen.
-
Gut, danke fuer die Aufklaerung
