Всегда ли unsigned char переводится в int?

Предположим следующее:

unsigned char foo = 3;
unsigned char bar = 5;

unsigned int shmoo = foo + bar;

Являютсяfoo а такжеbar значения гарантированно будут повышены доint значения для оценки выраженияfoo + bar - или реализации разрешено продвигать их?unsigned int

Враздел 6.2.5 пункт 8:

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

Враздел 6.2.5 пункт 9:

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

Гарантия того, что целочисленный тип с меньшим целочисленным значением степени преобразования имеет диапазон значений, который является поддиапазоном значений другого типа, кажется зависимым отзнаковость целочисленного типа.

signed char соответствуетsigned intunsigned char соответствуетunsigned int

Означает ли это, что значениеunsigned char гарантированно только в поддиапазонеunsigned int и не обязательноint? Если это так, означает ли это, что реализация теоретически может иметьunsigned char значение, которое не находится в поддиапазоне?int

Ответы на вопрос(2)

Ваш ответ на вопрос