Namespaces
Variants

Numeric limits

From cppreference.net
< c ‎ | types

Contenidos

Límites de los tipos enteros

Límites de los tipos enteros del lenguaje central
Definido en el encabezado <limits.h>
BOOL_WIDTH
(C23)
ancho en bits de _Bool
(constante macro)
CHAR_BIT
ancho de bit del byte
(constante macro)
MB_LEN_MAX
número máximo de bytes en un carácter multibyte
(macro constante)
CHAR_WIDTH
(C23)
ancho en bits de char , igual que CHAR_BIT
(constante macro)
CHAR_MIN
valor mínimo de char
(constante macro)
CHAR_MAX
valor máximo de char
(constante macro)
SCHAR_WIDTH SHRT_WIDTH INT_WIDTH LONG_WIDTH LLONG_WIDTH
(C23) (C23) (C23) (C23) (C23)
ancho en bits de signed char , short , int , long , y long long respectivamente
(constante macro)
SCHAR_MIN SHRT_MIN INT_MIN LONG_MIN LLONG_MIN
(C99)
valor mínimo de signed char , short , int , long y long long respectivamente
(constante macro)
SCHAR_MAX SHRT_MAX INT_MAX LONG_MAX LLONG_MAX
(C99)
valor máximo de signed char , short , int , long y long long respectivamente
(constante macro)
UCHAR_WIDTH USHRT_WIDTH UINT_WIDTH ULONG_WIDTH ULLONG_WIDTH
(C23) (C23) (C23) (C23) (C23)
ancho en bits de unsigned char , unsigned short , unsigned int , unsigned long , y unsigned long long respectivamente
(constante macro)
UCHAR_MAX USHRT_MAX UINT_MAX ULONG_MAX ULLONG_MAX
(C99)
valor máximo de unsigned char , unsigned short , unsigned int ,
unsigned long y unsigned long long respectivamente
(constante macro)
BITINT_MAXWIDTH
(C23)
ancho máximo N compatible con la declaración de un entero de precisión de bits en el especificador de tipo _BitInt ( N ) , mayor o igual que ULLONG_WIDTH
(constante macro)
Límites de los alias de tipo de biblioteca
Definido en el encabezado <stdint.h>
PTRDIFF_WIDTH
(C23)
ancho en bits del objeto de tipo ptrdiff_t
(constante macro)
PTRDIFF_MIN
(C99)
valor mínimo de ptrdiff_t
(constante macro)
PTRDIFF_MAX
(C99)
valor máximo de ptrdiff_t
(constante macro)
SIZE_WIDTH
(C23)
ancho en bits de objeto de tipo size_t
(constante macro)
SIZE_MAX
(C99)
valor máximo de size_t
(constante macro)
SIG_ATOMIC_WIDTH
(C23)
ancho en bits del objeto de tipo sig_atomic_t
(constante macro)
SIG_ATOMIC_MIN
(C99)
valor mínimo de sig_atomic_t
(constante macro)
SIG_ATOMIC_MAX
(C99)
valor máximo de sig_atomic_t
(constante macro)
WINT_WIDTH
(C23)
ancho en bits del objeto de tipo wint_t
(constante macro)
WINT_MIN
(C99)
valor mínimo de wint_t
(constante macro)
WINT_MAX
(C99)
valor máximo de wint_t
(constante macro)
Definido en el encabezado <wchar.h>
Definido en el encabezado <stdint.h>
WCHAR_WIDTH
(C23)
ancho en bits de objeto de tipo wchar_t
(constante macro)
WCHAR_MIN
(C99)
valor mínimo de wchar_t
(constante macro)
WCHAR_MAX
(C99)
valor máximo de wchar_t
(constante macro)

Notas

Los tipos de estas constantes, excepto CHAR_BIT y MB_LEN_MAX , deben coincidir con los resultados de las promociones enteras aplicadas a objetos de los tipos que describen: CHAR_MAX puede tener tipo int o unsigned int , pero nunca char . Similarmente, USHRT_MAX no puede ser de un tipo sin signo: su tipo puede ser int .

Una implementación independiente puede carecer de sig_atomic_t y/o wint_t typedef names, en cuyo caso las macros SIG_ATOMIC_* y/o WINT_* están correspondientemente ausentes.

Ejemplo

#include <limits.h>
#include <stdint.h>
#include <stdio.h>
int main(void)
{
    printf("CHAR_BIT       = %d\n", CHAR_BIT);
    printf("MB_LEN_MAX     = %d\n\n", MB_LEN_MAX);
    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\n", UCHAR_MAX);
    printf("SHRT_MIN       = %+d\n", SHRT_MIN);
    printf("SHRT_MAX       = %+d\n", SHRT_MAX);
    printf("USHRT_MAX      = %u\n\n", USHRT_MAX);
    printf("INT_MIN        = %+d\n", INT_MIN);
    printf("INT_MAX        = %+d\n", INT_MAX);
    printf("UINT_MAX       = %u\n\n", UINT_MAX);
    printf("LONG_MIN       = %+ld\n", LONG_MIN);
    printf("LONG_MAX       = %+ld\n", LONG_MAX);
    printf("ULONG_MAX      = %lu\n\n", ULONG_MAX);
    printf("LLONG_MIN      = %+lld\n", LLONG_MIN);
    printf("LLONG_MAX      = %+lld\n", LLONG_MAX);
    printf("ULLONG_MAX     = %llu\n\n", ULLONG_MAX);
    printf("PTRDIFF_MIN    = %td\n", PTRDIFF_MIN);
    printf("PTRDIFF_MAX    = %+td\n", PTRDIFF_MAX);
    printf("SIZE_MAX       = %zu\n", SIZE_MAX);
    printf("SIG_ATOMIC_MIN = %+jd\n",(intmax_t)SIG_ATOMIC_MIN);
    printf("SIG_ATOMIC_MAX = %+jd\n",(intmax_t)SIG_ATOMIC_MAX);
    printf("WCHAR_MIN      = %+jd\n",(intmax_t)WCHAR_MIN);
    printf("WCHAR_MAX      = %+jd\n",(intmax_t)WCHAR_MAX);
    printf("WINT_MIN       = %jd\n", (intmax_t)WINT_MIN);
    printf("WINT_MAX       = %jd\n", (intmax_t)WINT_MAX);
}

Salida posible:

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
PTRDIFF_MIN    = -9223372036854775808
PTRDIFF_MAX    = +9223372036854775807
SIZE_MAX       = 18446744073709551615
SIG_ATOMIC_MIN = -2147483648
SIG_ATOMIC_MAX = +2147483647
WCHAR_MIN      = -2147483648
WCHAR_MAX      = +2147483647
WINT_MIN       = 0
WINT_MAX       = 4294967295

Límites de los tipos de punto flotante

Definido en el encabezado <float.h>
FLT_RADIX
la base (base entera) utilizada por la representación de los tres tipos de punto flotante
(constante macro)
DECIMAL_DIG
(C99)
conversión de long double a decimal con al menos DECIMAL_DIG dígitos y de vuelta a long double es la conversión identidad: esta es la precisión decimal requerida para serializar/deserializar un long double
(constante macro)
FLT_DECIMAL_DIG DBL_DECIMAL_DIG LDBL_DECIMAL_DIG
(C11)
conversión desde float / double / long double a decimal con al menos FLT_DECIMAL_DIG / DBL_DECIMAL_DIG / LDBL_DECIMAL_DIG dígitos y viceversa es una conversión identidad: esta es la precisión decimal requerida para serializar/deserializar un valor de punto flotante. Definido como al menos 6 , 10 , y 10 respectivamente, o 9 para float IEEE y 17 para double IEEE (ver también el análogo en C++: max_digits10 )
(constante macro)
FLT_MIN DBL_MIN LDBL_MIN
valor mínimo, normalizado, positivo de float , double y long double respectivamente
(constante macro)
FLT_TRUE_MIN DBL_TRUE_MIN LDBL_TRUE_MIN
(C11)
valor positivo mínimo de float , double y long double respectivamente
(constante macro)
FLT_MAX DBL_MAX LDBL_MAX
valor máximo finito de float , double y long double respectivamente
(constante macro)
FLT_EPSILON DBL_EPSILON LDBL_EPSILON
diferencia absoluta entre 1.0 y el siguiente valor representable para float , double y long double respectivamente
(constante macro)
FLT_DIG DBL_DIG LDBL_DIG
número de dígitos decimales que se garantiza que se preservarán en texto → float / double / long double → texto ida y vuelta sin cambios debido a redondeo o desbordamiento (ver el análogo de C++ digits10 para más detalles)
(constante macro)
FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG
número de dígitos en base- FLT_RADIX que están en la mantisa de punto flotante y que pueden representarse sin perder precisión para float , double y long double respectivamente
(constante macro)
FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP
entero negativo mínimo tal que FLT_RADIX elevado a la potencia uno menos que ese entero es un float , double y long double normalizado respectivamente
(constante macro)
FLT_MIN_10_EXP DBL_MIN_10_EXP LDBL_MIN_10_EXP
mínimo entero negativo tal que 10 elevado a esa potencia es un float , double y long double normalizado respectivamente
(constante macro)
FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP
entero positivo máximo tal que FLT_RADIX elevado a la potencia uno menos que ese entero es un valor finito representable float , double y long double respectivamente
(constante macro)
FLT_MAX_10_EXP DBL_MAX_10_EXP LDBL_MAX_10_EXP
máximo entero positivo tal que 10 elevado a esa potencia es un float , double y long double finito representable respectivamente
(constante macro)
modo de redondeo de la aritmética de punto flotante
(macro constante)
especifica en qué precisión se realizan todas las operaciones aritméticas
(constante macro)
FLT_HAS_SUBNORM DBL_HAS_SUBNORM LDBL_HAS_SUBNORM
(C11) (obsoleto en C23)
si el tipo admite números subnormales ( denormal ):
- 1 – indeterminable, 0 – ausente, 1 – presente
(constante macro)

Ejemplo

#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
    printf("DECIMAL_DIG     = %d\n", DECIMAL_DIG);
    printf("FLT_DECIMAL_DIG = %d\n", FLT_DECIMAL_DIG);
    printf("FLT_RADIX       = %d\n", FLT_RADIX);
    printf("FLT_MIN         = %e\n", FLT_MIN);
    printf("FLT_MAX         = %e\n", FLT_MAX);
    printf("FLT_EPSILON     = %e\n", FLT_EPSILON);
    printf("FLT_DIG         = %d\n", FLT_DIG);
    printf("FLT_MANT_DIG    = %d\n", FLT_MANT_DIG);
    printf("FLT_MIN_EXP     = %d\n", FLT_MIN_EXP);
    printf("FLT_MIN_10_EXP  = %d\n", FLT_MIN_10_EXP);
    printf("FLT_MAX_EXP     = %d\n", FLT_MAX_EXP);
    printf("FLT_MAX_10_EXP  = %d\n", FLT_MAX_10_EXP);
    printf("FLT_ROUNDS      = %d\n", FLT_ROUNDS);
    printf("FLT_EVAL_METHOD = %d\n", FLT_EVAL_METHOD);
    printf("FLT_HAS_SUBNORM = %d\n", FLT_HAS_SUBNORM);
}

Salida posible:

DECIMAL_DIG     = 37
FLT_DECIMAL_DIG = 9
FLT_RADIX       = 2
FLT_MIN         = 1.175494e-38
FLT_MAX         = 3.402823e+38
FLT_EPSILON     = 1.192093e-07
FLT_DIG         = 6
FLT_MANT_DIG    = 24
FLT_MIN_EXP     = -125
FLT_MIN_10_EXP  = -37
FLT_MAX_EXP     = 128
FLT_MAX_10_EXP  = 38
FLT_ROUNDS      = 1
FLT_EVAL_METHOD = 1
FLT_HAS_SUBNORM = 1

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 5.2.4.2 Límites numéricos (p: TBD)
  • 7.22.3 Límites de otros tipos enteros (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 5.2.4.2 Límites numéricos (p: 20-27)
  • 7.20.3 Límites de otros tipos enteros (p: 215-216)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 5.2.4.2 Límites numéricos (p: 26-34)
  • 7.20.3 Límites de otros tipos enteros (p: 293-294)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 5.2.4.2 Límites numéricos (p: 21-28)
  • 7.18.3 Límites de otros tipos enteros (p: 259-260)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 2.2.4.2 Límites numéricos

Véase también

Documentación de C++ para Interfaz de límites numéricos de C