Integralna promocja

Kiedy kiedykolwiek podpisana liczba całkowita nie może reprezentować wszystkich wartości oryginalnego typu w odniesieniu do promocji całkowitej?

Z tekstu K&R, C Programming Language, 2nd Ed. str. 174

A.6.1 Promocja integralna

Znak, krótka liczba całkowita lub całkowite pole bitowe, wszystkie albo podpisane, albo nie, albo obiekt typu wyliczeniowego, mogą być użyte w wyrażeniu, gdzie można użyć liczby całkowitej.Jeśli int może reprezentować wszystkie wartości oryginalnego typu, to wartość jest konwertowana na int; w przeciwnym razie wartość jest konwertowana na int. Proces ten nazywany jest integralną promocją.

Ten kod pokazuje ograniczenia typów dla mojego systemu:

#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;
}

Wynik to:

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

Podpisany typ int jest znacznie większy niż którykolwiek z pozostałych typów, więc kiedy kiedykolwiek powróci do UINT_MAX?

questionAnswers(1)

yourAnswerToTheQuestion