Когда тип повышается до целого без знака?

это статья говорит:

Если все значения исходного типа могут быть представлены как int,
значение меньшего типа преобразуется в int; в противном случае это
конвертируется в беззнаковое целое

Все значения signed/unsigned char а также signed/unsigned short может быть представлен в виде intпоэтому, когда тип повышается до unsigned int?

2

Решение

short не может быть длиннее int но на некоторых платформах он может быть одинакового размера. То же самое касается int а также long, Это означает, что если «меньший» не подписан, то и «больший» тоже должен быть.

2

Другие решения

В статье используется небрежная терминология. Тип источника не должен быть «меньше», чем int, Вот что говорит стандарт C ++ 11:

Значение типа integer, отличного от bool, char16_t, char32_t, или же wchar_t чье целочисленное преобразование
ранг (4.13) меньше, чем ранг int может быть преобразовано в тип значения int если int может представлять все
значения типа источника; в противном случае исходное значение может быть преобразовано в значение типа unsigned int,

Есть платформы, на которых, скажем, unsigned short а также int оба 16 бит длиной. тем не менее, unsigned short имеет нижний ранг чем int по определению и подлежит интегральному продвижению. В этом случае, int не может представлять все значения типа unsigned shortтак что продвижение unsigned int,

Изменить: C99 имеет похожую формулировку:

Следующее может быть использовано в выражении везде, где int или же unsigned int может
использоваться:

  • Объект или выражение с целочисленным типом, чей коэффициент целочисленного преобразования меньше
    чем или равно званию int а также unsigned int,
  • Битовое поле типа _Bool, int, signed int, или же unsigned int,

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

2

хорошо, если sizeof (char) == sizeof (int), то unsigned char будет преобразован в unsigned int

0
По вопросам рекламы [email protected]