C言語のデータ型完全ガイド:整数、浮動小数点、void型
データ型の分類
C言語のデータ型は、異なる型の変数や関数を宣言するために使用される広範なシステムです。変数の型は、ストレージでの占有サイズと、格納されたビットパターンの解釈方法を決定します。
Cの型は以下のように分類されます:
| 番号 | 型と説明 |
|---|---|
| 1 | 基本型 算術型で、さらに(a)整数型と(b)浮動小数点型に分類されます。 |
| 2 | 列挙型 これも算術型で、プログラム全体で特定の離散的な整数値のみを割り当て可能な変数を定義するために使用されます。 |
| 3 | void型 型指定子voidは値が利用できないことを示します。 |
| 4 | 派生型 (a)ポインタ型、(b)配列型、(c)構造体型、(d)共用体型、(e)関数型を含みます。 |
配列型と構造体型は総称して集合型と呼ばれます。関数の型は関数の戻り値の型を指定します。以下のセクションでは基本型を見ていき、その他の型は後の章で扱います。
整数型
以下の表は標準的な整数型の詳細、ストレージサイズ、値の範囲を示しています:
| 型 | ストレージサイズ | 値の範囲 |
|---|---|---|
| char | 1バイト | -128〜127 または 0〜255 |
| unsigned char | 1バイト | 0〜255 |
| signed char | 1バイト | -128〜127 |
| int | 2または4バイト | -32,768〜32,767 または -2,147,483,648〜2,147,483,647 |
| unsigned int | 2または4バイト | 0〜65,535 または 0〜4,294,967,295 |
| short | 2バイト | -32,768〜32,767 |
| unsigned short | 2バイト | 0〜65,535 |
| long | 8バイト(32ビットOSでは4バイト) | -9223372036854775808〜9223372036854775807 |
| unsigned long | 8バイト | 0〜18446744073709551615 |
特定のプラットフォームでの型や変数の正確なサイズを取得するには、sizeof演算子を使用します。式sizeof(type)はオブジェクトまたは型のストレージサイズをバイト単位で生成します。以下は、limits.hヘッダーファイルで定義された様々な定数を使用して、マシン上の様々な型のサイズを取得する例です:
Live Demo#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("CHAR_BIT : %d\n", CHAR_BIT);
printf("CHAR_MAX : %d\n", CHAR_MAX);
printf("CHAR_MIN : %d\n", CHAR_MIN);
printf("INT_MAX : %d\n", INT_MAX);
printf("INT_MIN : %d\n", INT_MIN);
printf("LONG_MAX : %ld\n", (long) LONG_MAX);
printf("LONG_MIN : %ld\n", (long) LONG_MIN);
printf("SCHAR_MAX : %d\n", SCHAR_MAX);
printf("SCHAR_MIN : %d\n", SCHAR_MIN);
printf("SHRT_MAX : %d\n", SHRT_MAX);
printf("SHRT_MIN : %d\n", SHRT_MIN);
printf("UCHAR_MAX : %d\n", UCHAR_MAX);
printf("UINT_MAX : %u\n", (unsigned int) UINT_MAX);
printf("ULONG_MAX : %lu\n", (unsigned long) ULONG_MAX);
printf("USHRT_MAX : %d\n", (unsigned short) USHRT_MAX);
return 0;
}
上記プログラムをコンパイルして実行すると、Linuxでは以下の結果が得られます:
CHAR_BIT : 8 CHAR_MAX : 127 CHAR_MIN : -128 INT_MAX : 2147483647 INT_MIN : -2147483648 LONG_MAX : 9223372036854775807 LONG_MIN : -9223372036854775808 SCHAR_MAX : 127 SCHAR_MIN : -128 SHRT_MAX : 32767 SHRT_MIN : -32768 UCHAR_MAX : 255 UINT_MAX : 4294967295 ULONG_MAX : 18446744073709551615 USHRT_MAX : 65535
浮動小数点型
以下の表は標準的な浮動小数点型の詳細、ストレージサイズ、値の範囲、精度を示しています:
| 型 | ストレージサイズ | 値の範囲 | 精度 |
|---|---|---|---|
| float | 4バイト | 1.2E-38〜3.4E+38 | 6桁 |
| double | 8バイト | 2.3E-308〜1.7E+308 | 15桁 |
| long double | 10バイト | 3.4E-4932〜1.1E+4932 | 19桁 |
ヘッダーファイルfloat.hは、これらの値や実数のバイナリ表現に関するその他の詳細をプログラムで使用できるマクロを定義しています。以下の例はfloat型が占めるストレージスペースとその範囲値を出力します:
Live Demo#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("Storage size for float : %d \n", sizeof(float));
printf("FLT_MAX : %g\n", (float) FLT_MAX);
printf("FLT_MIN : %g\n", (float) FLT_MIN);
printf("-FLT_MAX : %g\n", (float) -FLT_MAX);
printf("-FLT_MIN : %g\n", (float) -FLT_MIN);
printf("DBL_MAX : %g\n", (double) DBL_MAX);
printf("DBL_MIN : %g\n", (double) DBL_MIN);
printf("-DBL_MAX : %g\n", (double) -DBL_MAX);
printf("Precision value: %d\n", FLT_DIG);
return 0;
}
上記プログラムをコンパイルして実行すると、Linuxでは以下の結果が得られます:
Storage size for float : 4 FLT_MAX : 3.40282e+38 FLT_MIN : 1.17549e-38 -FLT_MAX : -3.40282e+38 -FLT_MIN : -1.17549e-38 DBL_MAX : 1.79769e+308 DBL_MIN : 2.22507e-308 -DBL_MAX : -1.79769e+308 Precision value: 6
void型
void型は値が利用できないことを指定します。以下の3種類の状況で使用されます:
| 番号 | 種類と説明 |
|---|---|
| 1 | 関数の戻り値としてvoid 値を返さないCの様々な関数、つまりvoidを返す関数があります。戻り値のない関数の戻り値の型はvoidです。例:void exit(int status); |
| 2 | 関数の引数としてvoid パラメータを受け取らないCの様々な関数があります。パラメータのない関数はvoidを受け取れます。例:int rand(void); |
| 3 | voidへのポインタ void *型のポインタはオブジェクトのアドレスを表しますが、その型は表しません。例:メモリ割り当て関数void *malloc(size_t size);はvoidへのポインタを返し、任意のデータ型にキャスト可能です。 |
C言語