5
符号付き整数は、整数昇格に関して元の型のすべての値を表すことができない場合はいつですか?積分プロモーション
テキストからK & R、Cプログラミング言語、第2版。 p。 174
A.6.1積分推進
文字、短整数、または整数ビットフィールド、すべてのいずれか、署名されたか否か、列挙型のオブジェクトで使用することができます 式を使用して整数を使用できます。 intが のすべての元の値を表すことができる場合、値は intに変換されます。それ以外の場合は、値は符号なしの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に落ちるだろうか?
印刷したばかりの値は、システムによって異なる場合があります。 shortは<= int、intは<= a longなどが保証されています。したがって、shortとintは同じサイズを持つことができます。 @ minitechの投稿が正しい – guitarflow