Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

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 int20 ~ 65,535%hu
int(または signed int)4-2,147,483,648 ~ 2,147,483,647%d または %i
unsigned int40 ~ 4,294,967,295%u
long int(または signed long int)4-2,147,483,648 ~ 2,147,483,647%ld
unsigned long int40 ~ 4,294,967,295%lu

※ サイズと範囲は処理系(コンパイラやOS)によって異なる場合があります。上記は一般的な32ビット環境での例です。

文字型(Character)

文字型は、1文字を格納するためのデータ型です。内部的には文字は整数(ASCIIコード)として保存されており、たとえば 'A' のASCIIコードは 65 です。

文字型の一覧
型名サイズ(バイト)範囲書式指定子
char(または signed char)1-128 ~ 127%c
unsigned char10 ~ 255%c

浮動小数点型(Floating-point)

  • 実数(小数点を含む数値)を格納するために使用します。
  • 有効桁数が約6〜7桁程度でよければ「float」を使用します。
  • より高い精度(約15〜16桁)が必要な場合は「double」を使用します。
  • double 以上の精度が必要な場合は「long double」を使用します。
浮動小数点型の一覧
型名サイズ(バイト)範囲書式指定子
float43.4E-38 ~ 3.4E+38%f
double81.7E-308 ~ 1.7E+308%lf
long double163.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 を利用すれば、実行環境における各データ型の正確な範囲を簡単に確認できます。環境によってサイズや範囲が異なることがあるため、移植性の高いコードを書く際には必ず確認しておきましょう。

  1. C言語で配列を逆順に反転させるプログラムの書き方

    配列とは、共通の名前のもとで管理される、関連性のあるデータ項目の集まりのことです。同じ型の複数の値を効率的に扱いたい場合に活用されます。配列の宣言構文C言語で配列を宣言する際の基本的な構文は以下のとおりです。データ型 配列名 [サイズ];配列の初期化配列は、宣言と同時に初期化することもできます。int a[5] = { 10,20,30,40,50};この例では、整数型の配列 a の5つの要素に、それぞれ10から50までの値が順番に格納されています。C言語で配列を逆順にする方法配列の要素を逆順に並べ替えるには、要素の入れ替え(スワップ)やコピーのテクニックを利用します。たとえば、4つの要素を持

  2. 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