Вопрос по c – Интегральное продвижение

5

Когда случается, что целое число со знаком не может представлять все значения исходного типа в отношении целочисленного продвижения?

Из текста K & R, язык программирования C, 2-е изд. п. 174

A.6.1 Интегральное продвижение

Символ, короткое целое или целочисленное битовое поле, все со знаком или без, или объект типа перечисления, могут использоваться в выражении везде, где может использоваться целое число. Если int может представлять все значения исходного типа, тогда значение преобразуется в int; в противном случае значение преобразуется в unsigned int. Этот процесс называется интегральным продвижением.

Этот код показывает ограничения типов для моей системы:

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

Результат:

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

Тип int со знаком намного больше, чем у любого другого типа, поэтому, когда он вернется к UINT_MAX?

Только что напечатанные значения могут быть разными в разных системах. Просто гарантируется, что short - это <= int, а int - <= long, например. Таким образом, short и int могут иметь одинаковый размер. @ Минитек пост прав guitarflow

Ваш Ответ

1   ответ
5

short int будет того же размера, что иint так чтоunsigned short int не может быть повышен доint, например. Это не относится к вашему компилятору.

Похожие вопросы