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

C++におけるデータ型の値の範囲とMIN/MAXマクロの使い方

データ型の範囲とは

C++プログラミングにおいて、各データ型がメモリ上で表現できる値の範囲(最小値から最大値まで)を正しく把握することは非常に重要です。データ型ごとに格納できる値の範囲は異なりますが、これらの大きな数値をすべて暗記するのは困難です。

そこでC++では、これらの限界値を表すためのマクロが標準で用意されています。マクロを利用すれば、巨大な数値を手入力することなく、各データ型の最小値・最大値をそのまま変数へ代入したり、画面に出力したりできます。

マクロの基本例

例えば、char型(signed)は文字型データであり、-128から+127までの範囲を持ちます。この型の最小値・最大値を取得するためのマクロが、それぞれCHAR_MINCHAR_MAXです。

同様に、MIN/MAX系のマクロを使えば、あらゆるデータ型の範囲を簡単に調べられます。例えばint型であればINT_MININT_MAXを使用します。

主なマクロ一覧

マクロ名対象の型意味
CHAR_MIN / CHAR_MAXcharchar型の最小値・最大値
SCHAR_MIN / SCHAR_MAXsigned char符号付きchar型の最小値・最大値
UCHAR_MAXunsigned char符号なしchar型の最大値
SHRT_MIN / SHRT_MAXshort intshort型の最小値・最大値
INT_MIN / INT_MAXintint型の最小値・最大値
UINT_MAXunsigned int符号なしint型の最大値
LONG_MIN / LONG_MAXlong intlong型の最小値・最大値
FLT_MIN / FLT_MAXfloatfloat型の最小値・最大値
DBL_MIN / DBL_MAXdoubledouble型の最小値・最大値

代表的なデータ型の範囲

char型の範囲

-128 から +127

int型の範囲

-2147483648 から +2147483647

サンプルコード

以下は、各データ型のマクロを使って範囲を出力するC++プログラムです。

#include <iostream>
#include <climits>
#include <cfloat>
using namespace std;

int main() {
    cout << "Range of char : " << CHAR_MIN << " to " << CHAR_MAX << endl;
    cout << "Range of int : " << INT_MIN << " to " << INT_MAX << endl;
    cout << "Range of float : " << FLT_MIN << " to " << FLT_MAX << endl;
    cout << "Range of double : " << DBL_MIN << " to " << DBL_MAX << endl;
    cout << "Range of signed char : " << SCHAR_MIN << " to " << SCHAR_MAX << endl;
    cout << "Range of unsigned char : " << 0 << " to " << UCHAR_MAX << endl;
    cout << "Range of long int : " << LONG_MIN << " to " << LONG_MAX << endl;
    cout << "Range of unsigned int : " << 0 << " to " << UINT_MAX << endl;
    cout << "Range of short int : " << SHRT_MIN << " to " << SHRT_MAX << endl;
    return 0;
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

Range of char : -128 to 127
Range of int : -2147483648 to 2147483647
Range of float : 1.17549e-38 to 3.40282e+38
Range of double : 2.22507e-308 to 1.79769e+308
Range of signed char : -128 to 127
Range of unsigned char : 0 to 255
Range of long int : -9223372036854775808 to 9223372036854775807
Range of unsigned int : 0 to 4294967295
Range of short int : -32768 to 32767

まとめ

C++では、<climits>(整数型)や<cfloat>(浮動小数点型)ヘッダーに定義されたMIN/MAXマクロを使うことで、各データ型が表現できる値の範囲を簡単に取得できます。数値を暗記する必要がなく、環境に依存しない移植性の高いコードを書くことにも役立つため、積極的に活用しましょう。

  1. フリップフロップの種類と相互変換の方法を徹底解説

    フリップフロップ(flip-flop)は、順序論理回路の基本要素となるデジタル回路です。フリップフロップにはいくつかの種類があり、本記事では代表的な4種類の特徴と動作、さらに「あるフリップフロップから別のフリップフロップへ変換する」ための具体的な手順を解説します。フリップフロップには主に以下の4種類があります。SRフリップフロップDフリップフロップJKフリップフロップTフリップフロップSRフリップフロップとはSRフリップフロップは、クロック信号の立ち上がりエッジまたは立ち下がりエッジでのみ動作します。一方、SRラッチはイネーブル信号によって動作する点が異なります。SRフリップフロップの回路図を

  2. C++とC#におけるforeachループの使い方を徹底解説

    コレクションや配列の各要素を順番に処理したい場合、foreachループは非常に便利な構文です。従来のforループではインデックスの管理が必要でしたが、foreachを使えば要素そのものを直接取り出して処理できるため、コードがシンプルになり、バグも減らせます。この記事では、C++とC#それぞれにおけるforeachの書き方と実行例をわかりやすく解説します。 C++におけるforeach(範囲ベースforループ) C++には厳密には「foreach」という名前のキーワードは存在しませんが、C++11で導入された範囲ベースforループ(range-based for loop)が同等の機能を提供し