Promoción integral

¿Cuándo sucede que un entero con signo no puede representar todos los valores del tipo original con respecto a la promoción de enteros?

Del texto K&R, lenguaje de programación C, 2ª ed. pag. 174

A.6.1 Promoción Integral

Se puede usar un carácter, un entero corto o un campo de bits de entero, con signo o no, o un objeto de tipo de enumeración, en una expresión donde sea que se use un entero.Si un int puede representar todos los valores del tipo original, entonces el valor se convierte en int; De lo contrario, el valor se convierte en int sin signo.. Este proceso se llama promoción integral.

Este código muestra los límites de los tipos para mi sistema:

#include <stdio.h>
#include <limits.h>

int main(void)
{

    printf("CHAR_MAX: %i\n", CHAR_MAX);     
    printf("UCHAR_MAX: %i\n", UCHAR_MAX);

    printf("SHORT_MAX: %i\n", SHRT_MAX);        
    printf("USHORT_MAX: %i\n", USHRT_MAX);

    printf("INT_MAX: %i\n", INT_MAX);       
    printf("UINT_MAX: %u\n", UINT_MAX);

    return 0;
}

El resultado es:

CHAR_MAX: 127
UCHAR_MAX: 255
SHORT_MAX: 32767
USHORT_MAX: 65535
INT_MAX: 2147483647
UINT_MAX: 4294967295

El tipo int firmado es mucho más grande que cualquiera de los otros tipos, así que ¿cuándo volvería a caer en UINT_MAX?

Respuestas a la pregunta(1)

Su respuesta a la pregunta