2012-05-18 7 views
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に落ちるだろうか?

+0

印刷したばかりの値は、システムによって異なる場合があります。 shortは<= int、intは<= a longなどが保証されています。したがって、shortとintは同じサイズを持つことができます。 @ minitechの投稿が正しい – guitarflow

答えて

5

short intintと同じサイズにすることが可能ですので、unsigned short intは、たとえば、intに昇格することができませんでした。これはあなたのコンパイラには当てはまりません。