logo

C++ のデータ型範囲とそのマクロ

競技プログラミングではほとんどの場合、そのデータ型が保持できる最大値または最小値を変数に割り当てる必要がありますが、そのような大きくて正確な数値を記憶するのは困難な作業です。したがって、C++ にはこれらの数値を表す特定のマクロがあり、実際に整数を入力しなくても変数に直接割り当てることができます。

C++ のヘッダー ファイルは、整数データ型の上限と下限を表すマクロを定義します。 float および double の制限のマクロを定義します。これらのマクロを使用すると、手動で入力することなく、これらの極値を変数に簡単に割り当てることができます。

例を見てみましょう:



C++
#include    // for int char macros #include  // for float double macros #include  using namespace std; int main() {    // Displaying ranges with the help of macros  cout << 'char ranges from: ' << CHAR_MIN << ' to '  << CHAR_MAX << endl;  cout << 'nnshort int ranges from: ' << SHRT_MIN  << ' to ' << SHRT_MAX << endl;  cout << 'nint ranges from: ' << INT_MIN << ' to '  << INT_MAX << endl;  cout << 'nlong int ranges from: ' << LONG_MIN << ' to '  << LONG_MAX << endl;  cout << 'nfloat ranges from: ' << FLT_MIN << ' to '  << FLT_MAX << endl;  return 0; } 


出力

1GBは何MBですか
char ranges from: -128 to 127  

nshort int ranges from: -32768 to 32767

int ranges from: -2147483648 to 2147483647

long int ranges from: -9223372036854775808 to 9223372036854775807

float ranges from: 1.17549e-38 to 3.40282e+38

データ型とその範囲マクロ

データ型マクロの一部のリストを以下に示します。

データ型

範囲

最小値のマクロ

最大値のマクロ

チャー

-128 ~ +127

Char_min

CHAR_MAX

短い文字

-128 ~ +127

SCHAR_MIN

SCHAR_MAX

符号なし文字

0~255

--

フライングマックス

短い整数

-32768 ~ +32767

SHRT_MIN

SHRT_MAX

unsigned short int

0~65535

--

USHRT_MAX

整数

文字を文字列Javaに変換します

-2147483648 ~ +2147483647

INT_MIN

INT_MAX

符号なし整数

0 ~ 4294967295

--

UINT_MAX

長い整数

-9223372036854775808 ~ +9223372036854775807

LONG_MIN

LONG_MAX

符号なし長整数

0 ~ 18446744073709551615

--

ウソンマックス

長い長い整数

-9223372036854775808 ~ +9223372036854775807

Ship_min

LLONG_MAX

符号なしlong long int

0 ~ 18446744073709551615

--

ULLONG_MAX

フロート

1.17549e-38 ~ 3.40282e+38

Flt_min

FLT_MAX

浮動小数点 (負の値)

-1.17549e-38 ~ -3.40282e+38

-Lt_min

-FLT_MAX

ダブル

2.22507e-308 ~ 1.79769e+308

es5 と es6

DBL_MIN

DBL_MAX

ダブル(マイナス)

-2.22507e-308 ~ -1.79769e+308

-DBL_MIN

-DBL_MAX

最新の C++ におけるデータ型の制限

データ型の上限と下限に対する上記のマクロ アプローチは、C++ に継承された古い C 言語のアプローチです。ただし、C++ には、プログラマーに同じ情報を提供する独自の方法もあります。

C++ が提供するのは、 数値制限<> これらのマクロの最新の代替手段としてクラス テンプレートを使用します。このテンプレートは、データ型の制限にアクセスするための、よりオブジェクト指向のアプローチを提供します。内部で定義されています ヘッダファイル。

例を見てみましょう:

C++
#include    #include  using namespace std; int main() {    // Displaying ranges with the help of macros  cout << 'short int ranges from: ' << numeric_limits<short int>::min()  << ' to ' << numeric_limits<short int>::max() << endl;  cout << 'nint ranges from: ' << numeric_limits<int>::min() << ' to '  << numeric_limits<int>::max() << endl;  cout << 'nlong int ranges from: ' << numeric_limits<long>::min() << ' to '  << numeric_limits<long>::max() << endl;  cout << 'nfloat ranges from: ' << numeric_limits<float>::min() << ' to '  << numeric_limits<float>::max() << endl;  return 0; } 


出力

short int ranges from: -32768 to 32767  

int ranges from: -2147483648 to 2147483647

long int ranges from: -9223372036854775808 to 9223372036854775807

float ranges from: 1.17549e-38 to 3.40282e+38

マクロベースのアプローチと比較してタイプセーフで読みやすいため、マクロの代わりにこのアプローチを使用してデータ型の上限と下限を見つけることをお勧めします。