C言語の変数には代入できる値のそれぞれ範囲が決まっています。
ここで問題になるのが実は「○○型はxx~yyまで」と決まっているものと、処理系(動作するOSやコンパイラ)に依存するものがあります。
今回はそんなC言語の変数には代入できる値の範囲を調べるためのソースコードです。
C言語のプリミティブ型の種類
C言語の変数に代入できる値は、それぞれの型に依存します。
現在C言語で利用できる主なプリミティブ型は以下のものです。
- _Bool
- char
- short
- int
- long
- long long
- double
- float
これらの変数それぞれに「singed(符号付)」と「unsigned(符号なし)」の変数が宣言できます。
※_Boolは除く
それぞれの変数としてのバイト数(大きさ)を確認するソースは以下ののようにすれば確認できます。
#include int main( int argc, char **argv) { printf( "_Bool のサイズは[%I64d]\n", sizeof( _Bool )) ; printf( "char のサイズは[%I64d]\n", sizeof( char )) ; printf( "short のサイズは[%I64d]\n", sizeof( short )) ; printf( "int のサイズは[%I64d]\n", sizeof( int )) ; printf( "long のサイズは[%I64d]\n", sizeof( long )) ; printf( "long longのサイズは[%I64d]\n", sizeof( long long )) ; printf( "double のサイズは[%I64d]\n", sizeof( double )) ; printf( "float のサイズは[%I64d]\n", sizeof( float )) ; return 0 ; }
実行結果は以下のようになります。
_Bool のサイズは[1] char のサイズは[1] short のサイズは[2] int のサイズは[4] long のサイズは[4] long longのサイズは[8] double のサイズは[8] float のサイズは[4]
C言語のプリミティブ型の定数定義
C言語のプリミティブ型は先に述べたように処理系(OSやコンパイラ)に依存するものがあるので、あらかじめそれぞれの最大値と最小値をマクロ定数として定義されています。
定義はlimits.hに定義されており、以下のように利用することができます。
#include #include int main( int argc, char **argv) { printf( "signed char MIN[%d]\n", SCHAR_MIN ) ; printf( "signed char MAX[%d]\n", SCHAR_MAX ) ; printf( "unsigned char MAX[%d]\n", UCHAR_MAX ) ; printf( "signed short MIN[%d]\n", SHRT_MIN ) ; printf( "signed short MAX[%d]\n", SHRT_MAX ) ; printf( "unsigned short MAX[%4d]\n", USHRT_MAX ) ; printf( "signed int MIN[%d]\n", INT_MIN ) ; printf( "signed int MAX[%d]\n", INT_MAX ) ; printf( "unsigned int MAX[%u]\n", UINT_MAX ) ; printf( "signed long MIN[%ld]\n", LONG_MIN ) ; printf( "signed long MAX[%ld]\n", LONG_MAX ) ; printf( "unsigned long MAX[%ld]\n", ULONG_MAX ) ; printf( "signed long long MIN[%I64u]\n", LLONG_MIN ) ; printf( "signed long long MAX[%I64u]\n", LLONG_MAX ) ; printf( "unsigned long long MAX[%I64u]\n", ULLONG_MAX ) ; return 0 ; }
実行結果は以下のようになります。
signed char MIN[-128] signed char MAX[127] unsigned char MAX[255] signed short MIN[-32768] signed short MAX[32767] unsigned short MAX[65535] signed int MIN[-2147483648] signed int MAX[2147483647] unsigned int MAX[4294967295] signed long MIN[-2147483648] signed long MAX[2147483647] unsigned long MAX[-1] signed long long MIN[9223372036854775808] signed long long MAX[9223372036854775807] unsigned long long MAX[18446744073709551615]
まとめ
C言語の変数のメモリ上のバイト数や、変数の取り得る最大値、最小値を簡単に表示させてみました。
それぞれの処理系(OS、コンパイラ)で異なる部分があるので、コーディングする際は調査してから利用するようにしましょう。
(オーバーフローなど、思わぬトラブルに見舞われることになります。)
以上、「C言語の変数に代入できる最大値と最小値の調べ方」でした。