Wird unsigniertes Zeichen immer zu int befördert?
Angenommen, das Folgende:
unsigned char foo = 3;
unsigned char bar = 5;
unsigned int shmoo = foo + bar;
Sindfoo
undbar
Werte, die garantiert gefördert werdenint
Werte für die Auswertung des Ausdrucksfoo + bar
- oder dürfen Implementierungen diese fördern?unsigned int
?
ImAbschnitt 6.2.5 Absatz 8:
Für zwei beliebige Integer-Typen mit derselben Vorzeichenfolge und unterschiedlichem Integer-Umwandlungsrang (siehe 6.3.1.1) ist der Wertebereich des Typs mit kleinerem Integer-Umwandlungsrang ein Unterbereich der Werte des anderen Typs.
ImAbschnitt 6.2.5 Absatz 9:
Wenn einint
können alle Werte des ursprünglichen Typs darstellen, der Wert wird in einen umgewandeltint
; Andernfalls wird es in ein konvertiertunsigned int
.
Die Garantie, dass ein Integer-Typ mit kleinerem Integer-Umwandlungsrang einen Wertebereich aufweist, der ein Teilbereich der Werte des anderen Typs ist, scheint abhängig vonUnterschrift vom Integer-Typ.
signed char
entsprichtsigned int
unsigned char
entsprichtunsigned int
Bedeutet dies, dass der Wert vonunsigned char
ist nur garantiert im Unterbereich vonunsigned int
und nicht unbedingtint
? Wenn ja, bedeutet dies, dass eine Implementierung theoretisch eineunsigned char
Wert, der nicht im Unterbereich einesint
?