C言語ですべてのデータ型の範囲を表形式で表示するプログラムの作成方法
C言語で扱えるデータ型には、int(整数型)、short int、signed char、unsigned char、float、double など、さまざまな種類があります。それぞれの型が保持できる値の範囲(最小値・最大値)を正しく把握しておくことは、バグのない安全なプログラムを書くうえで非常に重要です。
データ型とは
データ型とは、変数に格納できる値の集合とその種類を定義するものです。用途に応じた適切なデータ型を選択することで、メモリを効率的に利用しながら正確な処理を行うことができます。
C言語のデータ型は、大きく次の2つに分類されます。
- 基本データ型(プリミティブ型)
- 派生データ型(配列・ポインタ・構造体など)
本記事では、基本データ型について詳しく解説します。
基本データ型
Cコンパイラは、次の4つの基本的なデータ型をサポートしています。
- 整数型(integer)
- 文字型(character)
- 浮動小数点型(floating-point)
- 倍精度浮動小数点型(double precision floating-point)
整数型(Integer)
整数型は、整数値を格納するためのデータ型です。符号付き(signed)と符号なし(unsigned)の両方の形式があり、さらに short int、int、long int の3つのサイズが用意されています。
| 整数型の一覧 | |||
|---|---|---|---|
| 型名 | サイズ(バイト) | 範囲 | 書式指定子 |
| short int(または signed short int) | 2 | -32,768 ~ 32,767 | %hd |
| unsigned short int | 2 | 0 ~ 65,535 | %hu |
| int(または signed int) | 4 | -2,147,483,648 ~ 2,147,483,647 | %d または %i |
| unsigned int | 4 | 0 ~ 4,294,967,295 | %u |
| long int(または signed long int) | 4 | -2,147,483,648 ~ 2,147,483,647 | %ld |
| unsigned long int | 4 | 0 ~ 4,294,967,295 | %lu |
※ サイズと範囲は処理系(コンパイラやOS)によって異なる場合があります。上記は一般的な32ビット環境での例です。
文字型(Character)
文字型は、1文字を格納するためのデータ型です。内部的には文字は整数(ASCIIコード)として保存されており、たとえば 'A' のASCIIコードは 65 です。
| 文字型の一覧 | |||
|---|---|---|---|
| 型名 | サイズ(バイト) | 範囲 | 書式指定子 |
| char(または signed char) | 1 | -128 ~ 127 | %c |
| unsigned char | 1 | 0 ~ 255 | %c |
浮動小数点型(Floating-point)
- 実数(小数点を含む数値)を格納するために使用します。
- 有効桁数が約6〜7桁程度でよければ「float」を使用します。
- より高い精度(約15〜16桁)が必要な場合は「double」を使用します。
- double 以上の精度が必要な場合は「long double」を使用します。
| 浮動小数点型の一覧 | |||
|---|---|---|---|
| 型名 | サイズ(バイト) | 範囲 | 書式指定子 |
| float | 4 | 3.4E-38 ~ 3.4E+38 | %f |
| double | 8 | 1.7E-308 ~ 1.7E+308 | %lf |
| long double | 16 | 3.4E-4932 ~ 1.1E+4932 | %Lf |
サンプルプログラム
次のCプログラムでは、ヘッダーファイル limits.h に定義された定数を使用して、各基本データ型の最小値と最大値を表形式で出力します。
#include <stdio.h>
#include <limits.h>
int main(void){
printf("DATA TYPE\t\t RANGE\n");
printf("-----------\t---------\n");
printf("short min\t\t%d\n", SHRT_MIN);
printf("short max\t\t%d\n", SHRT_MAX);
printf("int min\t\t\t%d\n", INT_MIN);
printf("int max\t\t\t%d\n", INT_MAX);
printf("char min\t\t%d\n", CHAR_MIN);
printf("char max\t\t%d\n", CHAR_MAX);
printf("long min\t\t%ld\n", LONG_MIN);
printf("long max\t\t%ld\n", LONG_MAX);
printf("unsigned char\t\t%u\n", UCHAR_MAX);
printf("unsigned long\t\t%lu\n", ULONG_MAX);
printf("unsigned int\t\t%u\n", UINT_MAX);
printf("unsigned short\t\t%u\n", USHRT_MAX);
return 0;
}
実行結果
実行すると、次のように各データ型の範囲が出力されます。
DATA TYPE RANGE ----------- --------- short min -32768 short max 32767 int min -2147483648 int max 2147483647 char min -128 char max 127 long min -2147483648 long max 2147483647 unsigned char 255 unsigned long 4294967295 unsigned int 4294967295 unsigned short 65535
このように、limits.h を利用すれば、実行環境における各データ型の正確な範囲を簡単に確認できます。環境によってサイズや範囲が異なることがあるため、移植性の高いコードを書く際には必ず確認しておきましょう。
-
C言語で配列を逆順に反転させるプログラムの書き方
配列とは、共通の名前のもとで管理される、関連性のあるデータ項目の集まりのことです。同じ型の複数の値を効率的に扱いたい場合に活用されます。配列の宣言構文C言語で配列を宣言する際の基本的な構文は以下のとおりです。データ型 配列名 [サイズ];配列の初期化配列は、宣言と同時に初期化することもできます。int a[5] = { 10,20,30,40,50};この例では、整数型の配列 a の5つの要素に、それぞれ10から50までの値が順番に格納されています。C言語で配列を逆順にする方法配列の要素を逆順に並べ替えるには、要素の入れ替え(スワップ)やコピーのテクニックを利用します。たとえば、4つの要素を持
-
C言語で配列内の指定範囲の積(剰余演算)を求める方法
配列 A、範囲の左端 L、右端 R、そして素数 P を入力として与え、L から R までの範囲内にある要素の総乗(積)を P で割った余りを計算して出力するのが本記事の課題です。下図のように、配列の要素が並んでおり、左端の値 L は 2、右端の値 R は 6 です。プログラムはこの範囲内に含まれる要素の積を順次計算していきます。入出力例Input-: A[] = { 1, 2, 3, 4, 5, 6 } P = 29 L = 2 R = 6 Output-: 24 Input-: A[] = {1, 2, 3, 4, 5, 6}, L = 2 R = 5 P = 113