Expressions de macro INT_MAX et INT_MIN en C++

Jinku Hu 12 octobre 2023
  1. Utilisez INT_MIN et INT_MAX pour accéder aux limites spécifiques de type en C++
  2. Utilisez INT_MIN et INT_MAX pour générer des nombres aléatoires en C++
Expressions de macro INT_MAX et INT_MIN en C++

Cet article présente plusieurs méthodes expliquant comment utiliser les expressions de macro INT_MAX et INT_MIN dans C++.

Utilisez INT_MIN et INT_MAX pour accéder aux limites spécifiques de type en C++

Le langage C++ définit plusieurs types de données intégrés avec certaines spécifications sur la quantité de mémoire qu’ils doivent occuper et les valeurs maximales/minimales correspondantes. Les types de données tels que les entiers sont couramment utilisés dans les calculs où leurs valeurs maximales et minimales possibles doivent être prises en compte pour le problème. Bien que les limites dépendent de la taille de stockage des types spécifiques, celles-ci varient en fonction de la plate-forme matérielle. Ainsi, nous devons accéder à ces valeurs avec un handle fixe, d’où les expressions de macro - INT_MIN et INT_MAX. Celles-ci correspondent aux valeurs minimales et maximales du type de données signé int. L’exemple suivant montre plusieurs expressions de macro disponibles sous l’en-tête <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;
}

Production:

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

Utilisez INT_MIN et INT_MAX pour générer des nombres aléatoires en C++

Des nombres aléatoires sont souvent générés entre une plage fixe. Il est utile d’avoir des limites de type de données numériques pour spécifier les paramètres de plage en conséquence et ne pas dépasser les résultats générés. L’exemple de code suivant utilise uniform_int_distribution pour limiter la plage des nombres générés. Dans ce cas, nous avons spécifié les valeurs INT_MAX et INT_MIN pour récupérer les entiers de la plage maximale disponible.

#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
Auteur: 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

Article connexe - C++ Integer