C言語では変数を確保する際に「型」を指定する必要があります。
C言語の型
C言語での定義されている型の種類
C言語では変数を確保する際に「型」を指定する必要があります。
定義されている型は以下のものです。
- char
- short
- int
- long
- double
- float
です。
それぞれコンパイラに対して特定のバイト数のエリア確保を命令します。
C言語での定義されている型の利用
具体的には以下のソースのように「変数の型 変数の名前;」というように宣言します。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c ;
short s ;
int i ;
long l ;
double d ;
float f ;
return EXIT_SUCCESS ;
}
C言語での定義されている型のサイズ
C言語で利用できる変数の型のサイズは以下の通りです。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char c ;
short s ;
int i ;
long l ;
double d ;
float f ;
printf( "char size is %dバイトn" , sizeof( char )) ;
printf( "short size is %dバイトn" , sizeof( short )) ;
printf( "int size is %dバイトn" , sizeof( int )) ;
printf( "long size is %dバイトn" , sizeof( long )) ;
printf( "double size is %dバイトn" , sizeof( double )) ;
printf( "float size is %dバイトn" , sizeof( float )) ;
return EXIT_SUCCESS ;
}
上記ソースの実行結果は
char size is 1バイト
short size is 2バイト
int size is 4バイト
long size is 4バイト
double size is 8バイト
float size is 4バイト
というようになります。
char,short,int,longは整数を、double,floatは小数を管理する場合に使用します。
C言語でのint型のサイズ
intのサイズは処理系(コンパイラ・OS)に依存してサイズが変わるので注意が必要です。
「intはMS-DOSは2バイト、UNIXは4バイト」と教えられましたが実際は処理系に依存が正しいようです。
C言語での型の関係
それぞれのバイト数の関係は
char ≦ short ≦ int ≦ long
と決められています。
C言語での符号有無
変数に格納する値を「+」のみに限定する場合は「unsigned」を付けて宣言します。
(これを一般に「符号なし」と言います。)
例えば
unsigned char c ;
unsigned int i ;
というようになります。
「unsigned」を付けた変数は最上位ビットを数字として使用しますが、「unsigned」がついていない変数は最上位ビットを符号(0がプラス、1がマイナス)を
表現します。
(マイナス値は2補数で表現します。)
char型は1バイトなので、2進数(ビット)で表現すると「0000 0000」から「1111 1111」までを表現できますが、「signed(unsignedの逆でsignedは省略可能です)」の場合は最上位ビットが符号なので(マイナスは2の補数で表現すると)最大値が「0111 1111」、最小値が「1111 1111」、「unsigned」場合は
最大値が「1111 1111」、最小値が「0000 0000」になりそれぞれsignedが「-128~127」、unsignedが「0~255」までを表現できます。
まとめ
| 種類 | 型名 | サイズ | 値の範囲 |
|---|---|---|---|
| 文字型 | char | 1バイト | -128 ~ 127 |
| 文字型 | unsigned char | 1バイト | 0 ~ 255 |
| 整数型 | short int | 2バイト | -32768 ~ 32767 |
| 整数型 | unsigned short int | 2バイト | 0 ~ 65535 |
| 整数型 | int | 4バイト | -2147483648 ~ 2147483647 |
| 整数型 | unsigned int | 4バイト | 0 ~ 4294967295 |
| 整数型 | long | 4バイト | 0 ~ 4294967295 |
| 整数型 | unsigned long | 4バイト | 0 ~ 4294967295 |
| 浮動小数点型 | float | 4バイト | 3.4E-38 ~ 3.4E+385 |
| 浮動小数点型 | double | 8バイト | 1.7E-308 ~ 1.7E+308 |
| 浮動小数点型 | long double | 8バイト | 1.7E-308 ~ 1.7E+308 |
になります。
