Rango de valores de los tipos C

En C se escribe que el estándar, es decir, un int debería tener:

  • min -32767 max 32767

pero en la implementación, es decir, en una máquina de 16 bits, los valores son:

  • min -32768 max 32767

¿Por qué esa diferencia en valores negativos?

Ambos rangos son válidos, lo que es inusual es el primero [-32767 … 32767] pero es perfectamente correcto de acuerdo con el estándar C.

En muchas implementaciones, el valor mínimo para un entero corto es -(2^15 - 1) luego -32768 . Lo verás definido como:

 #define SHRT_MIN 0x7FFF #define SHRT_MIN (-32767 - 1) #define SHRT_MIN (-32768) 

El estándar afirma que debe ser (-2^15 + 1) (entonces -32767 ) o menos (porque el valor real depende del sistema particular y la implementación de la biblioteca ). Debido a que la mayoría de las implementaciones utilizan el complemento de dos para representar números negativos (cuando el cero no tiene signo para los enteros ), el valor negativo mínimo es una unidad menos. En la práctica, significa que puede estar seguro de que cuando escribe su progtwig (independientemente del comstackdor y la plataforma) al menos puede almacenar -32767 en un short (pero para algunos comstackdores / plataformas el rango puede ser más amplio como lo vio en su comstackdor) .

Tenga en cuenta que, en este caso, -32768 tiene sentido (para plataformas donde sizeof(int) > sizeof(short) ), no como con MIN_INT , porque el valor literal es en realidad un int (no un short ).