Всё сказанное мною по этому вопросу - по памяти. Смотреть же надо про "продвижение" в "неявное преобразование типов".
Продвижения таковы:
(un)signed char -> signed int
signed short int -> signed int
unsigned short int -> signed int, если sizeof(unsigned short int) < sizeof(signed int)
unsigned short int -> unsigned int, если sizeof(unsigned short int) = sizeof(signed int)
битовые поля - аналогично unsigned short int, только сравнивается размер поля