Promoção Integral

Quando é sempre o caso que um inteiro assinado não pode representar todos os valores do tipo original em relação à promoção de número inteiro?

A partir do texto K & R, C Linguagem de Programação, 2ª Ed. p. 174

A.6.1 Promoção Integral

Um caractere, um inteiro curto ou um campo de bits inteiro, todos assinados ou não, ou um objeto do tipo enumeração, podem ser usados ​​em uma expressão onde quer que um inteiro possa ser usado.Se um int puder representar todos os valores do tipo original, o valor será convertido em int; caso contrário, o valor é convertido em int não assinado. Esse processo é chamado de promoção integral.

Este código mostra os limites dos tipos para o meu 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;
}

O resultado é:

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

O tipo int assinado é muito maior que qualquer um dos outros tipos, então, quando é que ele voltaria a UINT_MAX?

questionAnswers(1)

yourAnswerToTheQuestion