Makroausdrücke INT_MAX und INT_MIN in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie INT_MIN und INT_MAX, um auf typspezifische Grenzwerte in C++ zuzugreifen
  2. Verwendung von INT_MIN und INT_MAX zum Erzeugen von Zufallszahlen in C++
Makroausdrücke INT_MAX und INT_MIN in C++

Dieser Artikel zeigt verschiedene Methoden zur Verwendung der Makroausdrücke INT_MAX und INT_MIN in C++.

Verwenden Sie INT_MIN und INT_MAX, um auf typspezifische Grenzwerte in C++ zuzugreifen

Die C++-Sprache definiert mehrere integrierte Datentypen mit einigen Angaben dazu, wie viel Speicher sie belegen sollen, und den entsprechenden Maximal-/Minimalwerten. Datentypen wie Ganzzahlen werden häufig in Berechnungen verwendet, bei denen ihre möglichen Maximal- und Minimalwerte für das Problem berücksichtigt werden müssen. Obwohl die Grenzwerte von der Speichergröße der jeweiligen Typen abhängen, variieren diese je nach Hardwareplattform. Daher müssen wir mit einem festen Handle auf diese Werte zugreifen, daher die Makroausdrücke INT_MIN und INT_MAX. Diese entsprechen den Minimal- und Maximalwerten des Datentyps signiert int. Das folgende Beispiel zeigt mehrere Makroausdrücke, die unter der Überschrift <climits> verfügbar sind.

#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;
}

Ausgabe:

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

Verwendung von INT_MIN und INT_MAX zum Erzeugen von Zufallszahlen in C++

Zufallszahlen werden häufig zwischen einem festen Bereich generiert. Es ist nützlich, Beschränkungen für den Datentyp der Anzahl festzulegen, um die Bereichsparameter entsprechend anzugeben und die generierten Ergebnisse nicht zu überlaufen. Der folgende Beispielcode verwendet die uniform_int_distribution, um den Bereich der generierten Zahlen zu begrenzen. In diesem Fall haben wir die Werte INT_MAX und INT_MIN angegeben, um die Ganzzahlen aus dem maximal verfügbaren Bereich abzurufen.

#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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Integer