整数の昇格に関して、符号付き整数が元の型のすべての値を表すことができないのはいつですか?
テキスト K&R、C プログラミング言語、第 2 版より。p。174
A.6.1 インテグラル昇格
文字、short 整数、または整数ビットフィールド (すべて符号付きかどうかに関係なく)、または列挙型のオブジェクトは、整数が使用できる式で使用できます。int が元の型のすべての値を表すことができる場合、値は int に変換されます。それ以外の場合、値は unsigned int に変換されます。このプロセスは統合プロモーションと呼ばれます。
このコードは、私のシステムのタイプの制限を示しています。
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("CHAR_MAX: %i\n", CHAR_MAX);
printf("UCHAR_MAX: %i\n", UCHAR_MAX);
printf("SHORT_MAX: %i\n", SHRT_MAX);
printf("USHORT_MAX: %i\n", USHRT_MAX);
printf("INT_MAX: %i\n", INT_MAX);
printf("UINT_MAX: %u\n", UINT_MAX);
return 0;
}
結果は次のとおりです。
CHAR_MAX: 127
UCHAR_MAX: 255
SHORT_MAX: 32767
USHORT_MAX: 65535
INT_MAX: 2147483647
UINT_MAX: 4294967295
signed int 型は他のどの型よりもはるかに大きいので、いつ UINT_MAX にフォールバックするのでしょうか?