char a=101;
int sum=200;
a+=27;sum+=a;
printf("%d\n",sum);
Referenzantwort: D 72. Der Bereich des Typs char ist -128---+127. Wenn a+=27, wird der Wert von a zu -128, nachdem er den darstellbaren Bereich überschreitet.
a ist vom Typ char, -128~127, a=101, Überlauf nach a+=27 a=-128:
kein Überlauf, wenn a=127 01111111 (127er-Komplement) Überlauf,
wenn a+=1 10000000 (-128er-Komplement)
sum += a;
sum ist vom Typ int, a (char wird zu int hochgestuft)
10000000 -------->11111111 11111111 11111111 10000000 (-128 Komplement)
, also sum=200-128:00000000 00000000 00000000 11001 000
+ 11111111 11111111 11111111 10000000
---------------------------------------------- ---- ------------------------------------
00000000 00000000 00000000 01001000 (64+8=72 )
... schließen
a ist vom Typ char, -128~127, a=101, Überlauf nach a+=27 a=-128:
kein Überlauf, wenn a=127 01111111 (127er-Komplement) Überlauf,
wenn a+=1 10000000 (-128er-Komplement)
sum += a;
sum ist vom Typ int, a (char wird zu int hochgestuft)
10000000 -------->11111111 11111111 11111111 10000000 (-128 Komplement)
, also sum=200-128:00000000 00000000 00000000 11001 000
+ 11111111 11111111 11111111 10000000
---------------------------------------------- ---- ------------------------------------
00000000 00000000 00000000 01001000 (64+8=72 )
char belegt ein Byte, daher liegt der Datenbereich zwischen -128 und 127. Nach 127 beginnen sich die Daten ab -128 anzusammeln. a += 27 ist ursprünglich gleich 128, aber das Maximum ist 127, also zu diesem Zeitpunkt a=- 128 und sum += a entspricht sum. -a=200 - 128 entspricht 72
,