この記事には次のように書かれています。
元の型のすべての値が 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 に変換できます。int
int
unsigned int
たとえば、unsigned short
とint
の両方が 16 ビット長のプラットフォームがあります。それにもかかわらず、定義よりもランクunsigned short
が低く、統合昇格の対象となります。この場合、は type のすべての値を表すことができないため、プロモーションは to になります。int
int
unsigned short
unsigned int
編集:C99には同様の文言があります:
int
またはを使用できる式では、以下を使用unsigned int
できます。
int
整数変換ランクがおよびのランク以下である整数型のオブジェクトまたは式unsigned int
。_Bool
タイプ、int
、signed int
、またはのビットフィールドunsigned int
。
int
が元の型のすべての値を表すことができる場合、値はint
;に変換されます。それ以外の場合は、 に変換されますunsigned int
。これらは整数プロモーションと呼ばれます。48) 他のすべての型は、整数の昇格によって変更されません。