C++ のデータ型範囲とそのマクロ
競技プログラミングではほとんどの場合、そのデータ型が保持できる最大値または最小値を変数に割り当てる必要がありますが、そのような大きくて正確な数値を記憶するのは困難な作業です。したがって、C++ にはこれらの数値を表す特定のマクロがあり、実際に整数を入力しなくても変数に直接割り当てることができます。
の
例を見てみましょう:
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 < < ' n nshort int ranges from: ' < < SHRT_MIN < < ' to ' < < SHRT_MAX < < endl ; cout < < ' n int ranges from: ' < < INT_MIN < < ' to ' < < INT_MAX < < endl ; cout < < ' n long int ranges from: ' < < LONG_MIN < < ' to ' < < LONG_MAX < < endl ; cout < < ' n float ranges from: ' < < FLT_MIN < < ' to ' < < FLT_MAX < < endl ; return 0 ; }
出力
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 |
| 整数 | -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 | 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 < < ' n int ranges from: ' < < numeric_limits < int >:: min () < < ' to ' < < numeric_limits < int >:: max () < < endl ; cout < < ' n long int ranges from: ' < < numeric_limits < long >:: min () < < ' to ' < < numeric_limits < long >:: max () < < endl ; cout < < ' n float 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マクロベースのアプローチと比較してタイプセーフで読みやすいため、マクロの代わりにこのアプローチを使用してデータ型の上限と下限を見つけることをお勧めします。