Разрешает ли C99 UCHAR_MAX> UINT_MAX - PullRequest
2 голосов
/ 22 июня 2010

6.3.1.1 Состояния

Ранг целочисленного типа со знаком должен быть больше ранга целочисленного типа со знаком с меньшей точностью.

Ранг long long int должен быть больше, чем ранг long int, который должен быть больше, чем ранг int, который должен быть больше, чем ранг short int, который должен быть больше, чем ранг подписанного символа .


Так, может быть, это не так

signed   char has 32 bits (1 padding, 1 sign, 30 precision)
unsigned char has 32 bits (0 padding, 0 sign, 32 precision)
signed   int  has 32 bits (1 padding, 1 sign, 30 precision)
unsigned int  has 32 bits (2 padding, 0 sign, 30 precision)

Ответы [ 2 ]

4 голосов
/ 22 июня 2010

Только что нашел свой ответ. Это запрещено, согласно 6.2.5 (8)

Для любых двух целочисленных типов с одинаковой подписью и разным целочисленным значением степени преобразования (см. 6.3.1.1), диапазон значений типа с меньшим целым рангом преобразования поддиапазон значений другого типа.

0 голосов
/ 22 июня 2010

Ваши предположения о переменных типа char неверны.В limit.h CHAR_BIT равен 8. У вас есть 32.

В стандартном «5.2.4.2.1 Размеры целочисленных типов» CHAR_BIT определяется как 8.

...