Puntos de conocimiento básico del lenguaje C (9) Desbordamiento de tipos de datos


char a=101;
int sum=200;
a+=27;sum+=a;
printf("%d\n",sum);

Respuesta de referencia: D 72. El rango del tipo de carácter es -128 --- + 127. Cuando a + = 27, el valor de a se convertirá en -128 después de exceder el rango representable.

a es tipo char, -128~127, a=101, desbordamiento después de a+=27 a=-128:
sin desbordamiento cuando a=127 01111111 (complemento de 127) desbordamiento
cuando a+=1 10000000 (complemento de -128)
                           

suma += a;
la suma es de tipo int, a (char se promueve a int)
                     10000000 -------->11111111 11111111 11111111 10000000 (complemento -128)
                                                         
entonces, suma=200-128:00000000 00000000 00000000 1100 1000
                     + 11111111 11111111 11111111 10000000
 ---------------------------------------------- ---- ------------------------------------
                               00000000 00000000 00000000 01001000 (64+8=72 )  
... cerrar

a es tipo char, -128~127, a=101, desbordamiento después de a+=27 a=-128:
sin desbordamiento cuando a=127 01111111 (complemento de 127) desbordamiento
cuando a+=1 10000000 (complemento de -128)
                           

suma += a;
la suma es de tipo int, a (char se promueve a int)
                     10000000 -------->11111111 11111111 11111111 10000000 (complemento -128)
                                                         
entonces, suma=200-128:00000000 00000000 00000000 1100 1000
                     + 11111111 11111111 11111111 10000000
 ---------------------------------------------- ---- ------------------------------------
                               00000000 00000000 00000000 01001000 (64+8=72 )  

char ocupa un byte, por lo que el rango de datos es -128 ~ 127. Después de 127, los datos comenzarán a acumularse desde -128. a += 27 es originalmente igual a 128 pero el máximo es 127, por lo que en este momento a=- 128 y suma += a es equivalente a suma. -a=200 - 128 es igual a 72

,

Supongo que te gusta

Origin blog.csdn.net/qq_51519091/article/details/133150704
Recomendado
Clasificación