C++ での INT_MAX および INT_MIN マクロ式

胡金庫 2023年10月12日
  1. INT_MIN および INT_MAX を使用して、C++ のタイプ固有の制限にアクセスする
  2. C++ で乱数を生成するために INT_MININT_MAX を使用する
C++ での INT_MAX および INT_MIN マクロ式

この記事では、C++ で INT_MAX および INT_MIN マクロ式を利用する方法に関する複数の方法を示します。

INT_MIN および INT_MAX を使用して、C++ のタイプ固有の制限にアクセスする

C++ 言語は、複数の組み込みデータ型を定義し、それらが占有するメモリ量と対応する最大/最小値に関するいくつかの仕様を備えています。整数などのデータ型は、問題に対して可能な最大値と最小値を考慮する必要がある計算で一般的に使用されます。制限は特定のタイプのストレージサイズによって異なりますが、ハードウェアプラットフォームによって異なります。したがって、固定ハンドルを使用してこれらの値にアクセスする必要があります。したがって、マクロ式(INT_MIN および INT_MAX)にアクセスする必要があります。これらは、signed int データ型の最小値と最大値に対応します。次の例は、<climits> ヘッダーの下で使用できる複数のマクロ式を示しています。

#include <climits>
#include <iostream>

int main() {
  printf("CHAR_BIT   = %d\n", CHAR_BIT);
  printf("MB_LEN_MAX = %d\n", MB_LEN_MAX);
  printf("\n");

  printf("CHAR_MIN   = %+d\n", CHAR_MIN);
  printf("CHAR_MAX   = %+d\n", CHAR_MAX);
  printf("SCHAR_MIN  = %+d\n", SCHAR_MIN);
  printf("SCHAR_MAX  = %+d\n", SCHAR_MAX);
  printf("UCHAR_MAX  = %u\n", UCHAR_MAX);
  printf("\n");

  printf("SHRT_MIN   = %+d\n", SHRT_MIN);
  printf("SHRT_MAX   = %+d\n", SHRT_MAX);
  printf("USHRT_MAX  = %u\n", USHRT_MAX);
  printf("\n");

  printf("INT_MIN    = %+d\n", INT_MIN);
  printf("INT_MAX    = %+d\n", INT_MAX);
  printf("UINT_MAX   = %u\n", UINT_MAX);
  printf("\n");

  printf("LONG_MIN   = %+ld\n", LONG_MIN);
  printf("LONG_MAX   = %+ld\n", LONG_MAX);
  printf("ULONG_MAX  = %lu\n", ULONG_MAX);
  printf("\n");

  printf("LLONG_MIN  = %+lld\n", LLONG_MIN);
  printf("LLONG_MAX  = %+lld\n", LLONG_MAX);
  printf("ULLONG_MAX = %llu\n", ULLONG_MAX);
  printf("\n");

  return EXIT_SUCCESS;
}

出力:

CHAR_BIT   = 8
MB_LEN_MAX = 16

CHAR_MIN   = -128
CHAR_MAX   = +127
SCHAR_MIN  = -128
SCHAR_MAX  = +127
UCHAR_MAX  = 255

SHRT_MIN   = -32768
SHRT_MAX   = +32767
USHRT_MAX  = 65535

INT_MIN    = -2147483648
INT_MAX    = +2147483647
UINT_MAX   = 4294967295

LONG_MIN   = -9223372036854775808
LONG_MAX   = +9223372036854775807
ULONG_MAX  = 18446744073709551615

LLONG_MIN  = -9223372036854775808
LLONG_MAX  = +9223372036854775807
ULLONG_MAX = 18446744073709551615

C++ で乱数を生成するために INT_MININT_MAX を使用する

多くの場合、乱数は一定の範囲で生成されます。それに応じて範囲パラメーターを指定し、生成された結果をオーバーフローさせないようにするには、データ型の数に制限があると便利です。次のサンプルコードは、uniform_int_distribution を使用して、生成される数値の範囲を制限します。この場合、INT_MAXINT_MIN の値を指定して、使用可能な最大範囲から整数を取得しました。

#include <climits>
#include <iomanip>
#include <iostream>
#include <random>

using std::cout;
using std::endl;
using std::setprecision;

int main() {
  std::random_device rd;
  std::default_random_engine eng(rd());
  std::uniform_int_distribution<int> distr(INT_MIN, INT_MAX);

  for (int n = 0; n < 6; ++n) {
    cout << distr(eng) << "\n";
  }
  cout << endl;

  return EXIT_SUCCESS;
}
-895078088
1662821310
-636757160
1830410618
1031005518
-438660615
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Integer