Namespaces
Variants

Fixed width integer types (since C99)

From cppreference.net
< c ‎ | types

Contenidos

Tipos

Definido en el encabezado <stdint.h>
int8_t
int16_t
int32_t
int64_t
tipo entero con signo con ancho de
exactamente 8, 16, 32 y 64 bits respectivamente
sin bits de relleno y usando complemento a 2 para valores negativos
(proporcionado solo si la implementación admite directamente el tipo)
int_fast8_t
int_fast16_t
int_fast32_t
int_fast64_t
tipo entero con signo más rápido con ancho de
al menos 8, 16, 32 y 64 bits respectivamente
int_least8_t
int_least16_t
int_least32_t
int_least64_t
tipo entero con signo más pequeño con ancho de
al menos 8, 16, 32 y 64 bits respectivamente
intmax_t tipo entero de ancho máximo
intptr_t tipo entero capaz de contener un puntero
uint8_t
uint16_t
uint32_t
uint64_t
tipo entero sin signo con ancho de
exactamente 8, 16, 32 y 64 bits respectivamente
(proporcionado solo si la implementación admite directamente el tipo)
uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t
tipo entero sin signo más rápido con ancho de
al menos 8, 16, 32 y 64 bits respectivamente
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t
tipo entero sin signo más pequeño con ancho de
al menos 8, 16, 32 y 64 bits respectivamente
uintmax_t tipo entero sin signo de ancho máximo
uintptr_t tipo entero sin signo capaz de contener un puntero

La implementación puede definir nombres de typedef int N _t , int_fast N _t , int_least N _t , uint N _t , uint_fast N _t , y uint_least N _t cuando N no es 8, 16, 32 o 64. Los nombres de typedef de la forma int N _t solo pueden definirse si la implementación admite un tipo entero de ese ancho sin relleno. Por lo tanto, uint24_t denota un tipo entero sin signo con un ancho de exactamente 24 bits.

Cada una de las macros listadas a continuación está definida si y solo si la implementación define el nombre de tipo correspondiente. Las macros INT N _C y UINT N _C corresponden a los nombres de tipo int_least N _t y uint_least N _t , respectivamente.

Constantes de macro

Definido en el encabezado <stdint.h>
Enteros con signo : ancho
INT8_WIDTH INT16_WIDTH INT32_WIDTH INT64_WIDTH
(C23) (opcional)
ancho en bits de un objeto de tipo int8_t , int16_t , int32_t , int64_t (exactamente 8, 16, 32, 64)
(constante macro)
INT_FAST8_WIDTH INT_FAST16_WIDTH INT_FAST32_WIDTH INT_FAST64_WIDTH
(C23)
ancho en bits de un objeto de tipo int_fast8_t , int_fast16_t , int_fast32_t , int_fast64_t
(constante macro)
INT_LEAST8_WIDTH INT_LEAST16_WIDTH INT_LEAST32_WIDTH INT_LEAST64_WIDTH
(C23)
ancho en bits de un objeto de tipo int_least8_t , int_least16_t , int_least32_t , int_least64_t
(constante macro)
INTPTR_WIDTH
(C23) (opcional)
ancho en bits de un objeto de tipo intptr_t
(constante macro)
INTMAX_WIDTH
(C23)
ancho en bits de un objeto de tipo intmax_t
(constante macro)
Enteros con signo : valor mínimo
INT8_MIN INT16_MIN INT32_MIN INT64_MIN
valor mínimo de un objeto de tipo int8_t , int16_t , int32_t , int64_t
(constante macro)
INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
valor mínimo de un objeto de tipo int_fast8_t , int_fast16_t , int_fast32_t , int_fast64_t
(constante macro)
INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
valor mínimo de un objeto de tipo int_least8_t , int_least16_t , int_least32_t , int_least64_t
(constante macro)
INTPTR_MIN
valor mínimo de un objeto de tipo intptr_t
(constante macro)
INTMAX_MIN
valor mínimo de un objeto de tipo intmax_t
(constante macro)
Enteros con signo : valor máximo
INT8_MAX INT16_MAX INT32_MAX INT64_MAX
valor máximo de un objeto de tipo int8_t , int16_t , int32_t , int64_t
(constante macro)
INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
valor máximo de un objeto de tipo int_fast8_t , int_fast16_t , int_fast32_t , int_fast64_t
(constante macro)
INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
valor máximo de un objeto de tipo int_least8_t , int_least16_t , int_least32_t , int_least64_t
(constante macro)
INTPTR_MAX
valor máximo de un objeto de tipo intptr_t
(constante macro)
INTMAX_MAX
valor máximo de un objeto de tipo intmax_t
(constante macro)
Enteros sin signo : ancho
UINT8_WIDTH UINT16_WIDTH UINT32_WIDTH UINT64_WIDTH
(C23) (opcional)
ancho en bits de un objeto de tipo uint8_t , uint16_t , uint32_t , uint64_t (exactamente 8, 16, 32, 64)
(constante macro)
UINT_FAST8_WIDTH UINT_FAST16_WIDTH UINT_FAST32_WIDTH UINT_FAST64_WIDTH
(C23)
ancho en bits de un objeto de tipo uint_fast8_t , uint_fast16_t , uint_fast32_t , uint_fast64_t
(constante macro)
UINT_LEAST8_WIDTH UINT_LEAST16_WIDTH UINT_LEAST32_WIDTH UINT_LEAST64_WIDTH
(C23)
ancho en bits de un objeto de tipo uint_least8_t , uint_least16_t , uint_least32_t , uint_least64_t
(constante macro)
UINTPTR_WIDTH
(C23) (opcional)
ancho en bits de un objeto de tipo uintptr_t
(constante macro)
UINTMAX_WIDTH
(C23)
ancho en bits de un objeto de tipo uintmax_t
(constante macro)
Enteros sin signo : valor máximo
UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
valor máximo de un objeto de tipo uint8_t , uint16_t , uint32_t , uint64_t
(constante macro)
UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
valor máximo de un objeto de tipo uint_fast8_t , uint_fast16_t , uint_fast32_t , uint_fast64_t
(constante macro)
UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
valor máximo de un objeto de tipo uint_least8_t , uint_least16_t , uint_least32_t , uint_least64_t
(constante macro)
UINTPTR_MAX
valor máximo de un objeto de tipo uintptr_t
(constante macro)
UINTMAX_MAX
valor máximo de un objeto de tipo uintmax_t
(constante macro)

Macros de función para constantes enteras de ancho mínimo

INT8_C INT16_C INT32_C INT64_C
se expande a una expresión constante entera con el valor especificado por su argumento y el tipo int_least8_t , int_least16_t , int_least32_t , int_least64_t respectivamente
(macro de función)
INTMAX_C
se expande a una expresión constante entera con el valor especificado por su argumento y el tipo intmax_t
(macro de función)
UINT8_C UINT16_C UINT32_C UINT64_C
se expande a una expresión constante entera con el valor especificado por su argumento y el tipo uint_least8_t , uint_least16_t , uint_least32_t , uint_least64_t respectivamente
(macro de función)
UINTMAX_C
se expande a una expresión constante entera con el valor especificado por su argumento y el tipo uintmax_t
(macro de función)
#include <stdint.h>
UINT64_C(0x123) // podría expandirse a 0x123ULL o 0x123UL

Constantes de macro de formato

Definido en el encabezado <inttypes.h>

Constantes de formato para la familia de funciones fprintf

Cada una de las PRI macros enumeradas aquí está definida si y solo si la implementación define el nombre de tipo correspondiente.

Equivalente
para int o
unsigned int
Descripción Macros para tipos de datos




[u]int x _t




[u]int_least x _t
[u]int_fast x _t
[u]intmax_t
[u]intptr_t
d salida de un valor entero decimal con signo PRId x PRIdLEAST x PRIdFAST x PRIdMAX PRIdPTR
i PRIi x PRIiLEAST x PRIiFAST x PRIiMAX PRIiPTR
u salida de un valor entero decimal sin signo PRIu x PRIuLEAST x PRIuFAST x PRIuMAX PRIuPTR
o salida de un valor entero octal sin signo PRIo x PRIoLEAST x PRIoFAST x PRIoMAX PRIoPTR
x salida de un valor entero hexadecimal en minúsculas sin signo PRIx x PRIxLEAST x PRIxFAST x PRIxMAX PRIxPTR
X salida de un valor entero hexadecimal en mayúsculas sin signo PRIX x PRIXLEAST x PRIXFAST x PRIXMAX PRIXPTR

Constantes de formato para la familia de funciones fscanf

Cada una de las SCN macros listadas aquí está definida si y solo si la implementación define el nombre de tipo correspondiente y tiene un modificador de longitud fscanf adecuado para el tipo.

Equivalente
para int o
unsigned int
Descripción Macros para tipos de datos




[u]int x _t




[u]int_least x _t
[u]int_fast x _t
[u]intmax_t
[u]intptr_t
d entrada de un valor entero decimal con signo SCNd x SCNdLEAST x SCNdFAST x SCNdMAX SCNdPTR
i entrada de un valor entero con signo (la base se determina por los primeros caracteres analizados) SCNi x SCNiLEAST x SCNiFAST x SCNiMAX SCNiPTR
u entrada de un valor entero decimal sin signo SCNu x SCNuLEAST x SCNuFAST x SCNuMAX SCNuPTR
o entrada de un valor entero octal sin signo SCNo x SCNoLEAST x SCNoFAST x SCNoMAX SCNoPTR
x entrada de un valor entero hexadecimal sin signo SCNx x SCNxLEAST x SCNxFAST x SCNxMAX SCNxPTR

Ejemplo

Véase también la nota de compatibilidad de C++ respecto a los espacios antes de las macros de formato utilizadas en este ejemplo.

#include <inttypes.h>
#include <stdio.h>
int main(void)
{
    printf("%zu\n", sizeof(int64_t));
    printf("%s\n", PRId64);
    printf("%+" PRId64 "\n", INT64_MIN);
    printf("%+" PRId64 "\n", INT64_MAX);
    int64_t n = 7;
    printf("%+" PRId64 "\n", n);
}

Salida posible:

8
lld
-9223372036854775808
+9223372036854775807
+7

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.8.1 Macros para especificadores de formato (p: TBD)
  • 7.18 Tipos enteros <stdint.h> (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.8.1 Macros para especificadores de formato (p: 158-159)
  • 7.18 Tipos enteros <stdint.h> (p: 212-216)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.8.1 Macros para especificadores de formato (p: 217-218)
  • 7.18 Tipos enteros <stdint.h> (p: 289-295)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.8.1 Macros para especificadores de formato (p: 198-199)
  • 7.18 Tipos enteros <stdint.h> (p: 255-261)

Véase también

Documentación de C++ para Tipos de enteros de ancho fijo
Documentación de C++ para Literales definidos por el usuario ( nota sobre macros de formato )