C++の各データ型が取れる値の範囲と最小値・最大値マクロ一覧
C++におけるデータ型の範囲とマクロ
プログラミングでは、特定のデータ型が取り得る最小値や最大値を利用したい場面が少なくありません。しかし、これらの値をすべて暗記するのは非常に困難です。そこでC++では、各データ型の最小値・最大値を表すための定義済みマクロが標準で用意されています。
なお、unsigned(符号なし)型は最小値が必ず0になるため、最小値用のマクロは定義されていません。
主なデータ型の範囲と対応するマクロ一覧
| データ型 | 範囲 | 最小値のマクロ | 最大値のマクロ |
|---|---|---|---|
| char | -128 ~ +127 | CHAR_MIN | CHAR_MAX |
| signed char | -128 ~ +127 | SCHAR_MIN | SCHAR_MAX |
| unsigned char | 0 ~ 255 | ----- | UCHAR_MAX |
| short int | -32768 ~ +32767 | SHRT_MIN | SHRT_MAX |
| unsigned short int | 0 ~ 65535 | ----- | USHRT_MAX |
| int | -2147483648 ~ +2147483647 | INT_MIN | INT_MAX |
| unsigned int | 0 ~ 4294967295 | ----- | UINT_MAX |
| long int | -2147483648 ~ +2147483647 | LONG_MIN | LONG_MAX |
| unsigned long int | 0 ~ 4294967295 | ----- | ULONG_MAX |
| long long int | -9223372036854775808 ~ +9223372036854775807 | LLONG_MIN | LLONG_MAX |
| unsigned long long int | 0 ~ 18446744073709551615 | ----- | ULLONG_MAX |
| float | 1.17549e-38 ~ 3.40282e+38 | FLT_MIN | FLT_MAX |
| float(負の値) | -1.17549e-38 ~ -3.40282e+38 | -FLT_MIN | -FLT_MAX |
| double | 2.22507e-308 ~ 1.79769e+308 | DBL_MIN | DBL_MAX |
| double(負の値) | -2.22507e-308 ~ -1.79769e+308 | -DBL_MIN | -DBL_MAX |
整数型や文字型のマクロを使用するにはヘッダー <climits>(C言語形式では <limits.h>)を、浮動小数点型のマクロを使用するには <cfloat>(<float.h>)をインクルードする必要があります。
浮動小数点型のマクロに関する注意点
FLT_MIN や DBL_MIN は「最も小さい負の値」ではなく、「正の正規化された最小値」を表します。そのため、負の方向の極限値を得たい場合は、-FLT_MAX のようにマクロにマイナス符号を付けて使用します。
データ型の範囲を出力するサンプルコード
それでは、C++の各データ型の範囲を実際に出力する簡単なプログラムを見てみましょう。
#include<iostream>
#include<climits> // char・int系マクロ用
#include<cfloat> // float・double系マクロ用
using namespace std;
int main() {
cout << "charの範囲: (" << CHAR_MIN << ", " << CHAR_MAX << ")\n";
cout << "signed charの範囲: (" << SCHAR_MIN << ", " << SCHAR_MAX << ")\n";
cout << "unsigned charの範囲: (" << 0 << ", " << UCHAR_MAX << ")\n";
cout << "short intの範囲: (" << SHRT_MIN << ", " << SHRT_MAX << ")\n";
cout << "unsigned short intの範囲: (" << 0 << ", " << USHRT_MAX << ")\n";
cout << "intの範囲: (" << INT_MIN << ", " << INT_MAX << ")\n";
cout << "unsigned intの範囲: (" << 0 << ", " << UINT_MAX << ")\n";
cout << "long intの範囲: (" << LONG_MIN << ", " << LONG_MAX << ")\n";
cout << "unsigned long intの範囲: (" << 0 << ", " << ULONG_MAX << ")\n";
cout << "long long intの範囲: (" << LLONG_MIN << ", " << LLONG_MAX << ")\n";
cout << "unsigned long long intの範囲: (" << 0 << ", " << ULLONG_MAX << ")\n";
cout << "floatの範囲: (" << FLT_MIN << ", " << FLT_MAX << ")\n";
cout << "float(負の値)の範囲: (" << -FLT_MIN << ", " << -FLT_MAX << ")\n";
cout << "doubleの範囲: (" << DBL_MIN << ", " << DBL_MAX << ")\n";
cout << "double(負の値)の範囲: (" << -DBL_MIN << ", " << -DBL_MAX << ")";
}
実行結果
charの範囲: (-128, 127) signed charの範囲: (-128, 127) unsigned charの範囲: (0, 255) short intの範囲: (-32768, 32767) unsigned short intの範囲: (0, 65535) intの範囲: (-2147483648, 2147483647) unsigned intの範囲: (0, 4294967295) long intの範囲: (-2147483648, 2147483647) unsigned long intの範囲: (0, 4294967295) long long intの範囲: (-9223372036854775808, 9223372036854775807) unsigned long long intの範囲: (0, 18446744073709551615) floatの範囲: (1.17549e-038, 3.40282e+038) float(負の値)の範囲: (-1.17549e-038, -3.40282e+038) doubleの範囲: (2.22507e-308, 1.79769e+308) double(負の値)の範囲: (-2.22507e-308, -1.79769e+308)
このようにマクロを活用すれば、各データ型の範囲を簡単に確認できます。競技プログラミングでの初期値設定や、オーバーフロー対策などにも非常に役立つので、ぜひ覚えておきましょう。
-
C++の変数とは?基本の変数宣言と主なデータ型をわかりやすく解説
変数(へんすう)とは、プログラムが操作できる「名前付きの記憶領域」のことです。C++では、各変数に必ず特定の「型」が割り当てられます。この型によって、次の3つの要素が決まります。変数のメモリ上のサイズと配置そのメモリに格納できる値の範囲その変数に適用できる演算(操作)の種類最もシンプルな変数の例を見てみましょう。int my_val = 5;この例では、int型(整数型)の変数 my_val を宣言し、値として 5 を代入しています。変数の宣言方法C++で変数を定義する一般的な書式は次のとおりです。type variable_name;宣言と同時に初期化したい場合は、以下のように記述します。t
-
C++とC#におけるforeachループの使い方を徹底解説
コレクションや配列の各要素を順番に処理したい場合、foreachループは非常に便利な構文です。従来のforループではインデックスの管理が必要でしたが、foreachを使えば要素そのものを直接取り出して処理できるため、コードがシンプルになり、バグも減らせます。この記事では、C++とC#それぞれにおけるforeachの書き方と実行例をわかりやすく解説します。 C++におけるforeach(範囲ベースforループ) C++には厳密には「foreach」という名前のキーワードは存在しませんが、C++11で導入された範囲ベースforループ(range-based for loop)が同等の機能を提供し