Grundlegende Wissenspunkte der C-Sprache (9) Datentypüberlauf


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

,

Ich denke du magst

Origin blog.csdn.net/qq_51519091/article/details/133150704
Empfohlen
Rangfolge