この記事には次のように書かれています。
元の型のすべての値が int として表現できる場合は、小さい方の型の値が int に変換されます。それ以外の場合は、unsigned int に変換されます
signed/unsigned charとのすべての値はsigned/unsigned shortとして表すことができるintため、型が に昇格するのはunsigned intいつですか?
この記事では、ずさんな用語が使用されています。ソース タイプは より「小さい」必要はありませんint。C++11 標準の内容は次のとおりです。
bool、char16_t、char32_t、またはwchar_t整数変換ランク (4.13) が のランクより小さい整数型のprvalueは、ソース型のすべての値を表すことができる場合int、型の prvalue に変換できます。それ以外の場合は、ソースの prvalue を type の prvalue に変換できます。intintunsigned int
たとえば、unsigned shortとintの両方が 16 ビット長のプラットフォームがあります。それにもかかわらず、定義よりもランクunsigned shortが低く、統合昇格の対象となります。この場合、は type のすべての値を表すことができないため、プロモーションは to になります。intintunsigned shortunsigned int
編集:C99には同様の文言があります:
intまたはを使用できる式では、以下を使用unsigned intできます。
int整数変換ランクがおよびのランク以下である整数型のオブジェクトまたは式unsigned int。_Boolタイプ、int、signed int、またはのビットフィールドunsigned int。
intが元の型のすべての値を表すことができる場合、値はint;に変換されます。それ以外の場合は、 に変換されますunsigned int。これらは整数プロモーションと呼ばれます。48) 他のすべての型は、整数の昇格によって変更されません。