Expresiones de macro INT_MAX e INT_MIN en C++

Jinku Hu 12 octubre 2023
  1. Utilice INT_MIN e INT_MAX para acceder a los límites específicos del tipo en C++
  2. Utilice INT_MIN e INT_MAX para generar números aleatorios en C++
Expresiones de macro INT_MAX e INT_MIN en C++

Este artículo demostrará varios métodos sobre cómo utilizar las expresiones de macro INT_MAX e INT_MIN en C++.

Utilice INT_MIN e INT_MAX para acceder a los límites específicos del tipo en C++

El lenguaje C++ define múltiples tipos de datos integrados con algunas especificaciones sobre cuánta memoria deben ocupar y los valores máximos/mínimos correspondientes. Los tipos de datos como los números enteros se usan comúnmente en cálculos donde sus posibles valores máximos y mínimos deben tenerse en cuenta para resolver el problema. Aunque los límites dependen del tamaño de almacenamiento de los tipos específicos, estos varían según la plataforma de hardware. Por lo tanto, necesitamos acceder a estos valores con un identificador fijo, de ahí las expresiones macro - INT_MIN e INT_MAX. Estos corresponden a los valores mínimo y máximo del tipo de datos con signo int. El siguiente ejemplo demuestra múltiples expresiones macro que están disponibles bajo el encabezado <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;
}

Producción :

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

Utilice INT_MIN e INT_MAX para generar números aleatorios en C++

Los números aleatorios a menudo se generan entre un rango fijo. Es útil tener límites de tipo de datos numéricos para especificar los parámetros de rango en consecuencia y no desbordar los resultados generados. El siguiente código de ejemplo utiliza uniform_int_distribution para limitar el rango de los números generados. En este caso, especificamos los valores INT_MAX e INT_MIN para recuperar los enteros del rango máximo 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
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

Artículo relacionado - C++ Integer