[Revisión para el examen de ingreso de posgrado] Sobre el problema de desbordamiento de salida del lenguaje C | sobre i corto = 65535/65536/65537

#include <stdio.h>
using namespace std;
int main()
{
    
    
    short i = 65535;
    printf("%d\n",i);
} // namespace std;

El resultado de salida es - 1.
El rango de valores de int corto con signo es -32768 ~ 32767, y el 65535 entrante se desborda. El tipo int corto intercepta los últimos ocho dígitos de 65535, 11111111 (ocho 1), y el primer dígito es 1, que se considera un número negativo. Como el número negativo se expresa en forma de complemento en la computadora, el complemento del número negativo es la inversión más 1, y finalmente se obtiene 00000001, y el resultado es -1.

#include <stdio.h>
using namespace std;
int main()
{
    
    
    short i = 65535;
    printf("%d\n",i);
} // namespace std;

El resultado de salida es 0.
El tipo int corto se trunca a 65536 ocho dígitos 00000000 (ocho 0) y el resultado es 0.

#include <stdio.h>
using namespace std;
int main()
{
    
    
    short i = 65535;
    printf("%d\n",i);
} // namespace std;

El resultado de salida es 1.
El tipo int corto se trunca a 65536 ocho dígitos 00000001 (siete 0) y el resultado es 1.

#include <stdio.h>
using namespace std;
int main()
{
    
    
    unsigned short int i = 65535;
    printf("%d\n",i);
} // namespace std;

El resultado de salida es 65536.
El rango de valores de int corto sin signo es 0-65535


Pregunta extendida
El resultado de ejecutar el siguiente código:

short i = 65537;
int j = i + 1;
printf("i=%d,j=%d\n", i, j);

Salida: i=1,j=2
rango de medios cortos sin signo -32768~32767.
Cuando 65536 se expresa como 0000 0000 0000 0001 0000 0000 0000 0001 por int (cuatro bytes de 32 bits), cuando se convierte en corto, los dos bytes superiores se pierden, por lo que se convierte en 1. Encontrar el valor de j es convertir i en un tipo int, y los dos bytes de orden superior se rellenan con 0, por lo que no hay cambio en i, y el valor de j es 2.


Enlace de referencia
https://blog.csdn.net/jack0201/article/details/75646978
https://www.nowcoder.com/questionTerminal/ad664223e69b4027a6371fe2f3739490

Supongo que te gusta

Origin blog.csdn.net/m0_52427832/article/details/131130703
Recomendado
Clasificación