Diferencia entre int32, int, int32_t, int8 e int8_t

5 minutos de lectura

Diferencia entre int32 int int32 t int8 e int8 t
linuxfreak

Encontré el tipo de datos int32_t en un programa C recientemente. Sé que almacena 32 bits, pero no int y int32 ¿hacer lo mismo?

Además, quiero usar char en un programa Puedo usar int8_t ¿en lugar de? ¿Cuál es la diferencia?

Para resumir: ¿Cuál es la diferencia entre int32, int, int32_t, int8 e int8_t en C?

Diferencia entre int32 int int32 t int8 e int8 t
ataúd de jerry

Entre int32 y int32_t(y asimismo entre int8 y int8_t) la diferencia es bastante simple: el estándar C define int8_t y int32_tpero no define nada llamado int8 o int32 — el último (si es que existe) es probablemente de algún otro encabezado o biblioteca (lo más probable es anterior a la adición de int8_t y int32_t en C99).

Simple int es bastante diferente a los demás. Donde int8_t y int32_t cada uno tiene un tamaño específico, int puede ser de cualquier tamaño >= 16 bits. En diferentes momentos, tanto 16 bits como 32 bits han sido razonablemente comunes (y para una implementación de 64 bits, probablemente debería ser de 64 bits).

Por otro lado, int está garantizado que estará presente en cada implementación de C, donde int8_t y int32_t no son. Sin embargo, probablemente esté abierto a la pregunta de si esto es importante para usted. Si usa C en sistemas integrados pequeños y/o compiladores más antiguos, puede ser un problema. Si lo usa principalmente con un compilador moderno en máquinas de escritorio/servidor, probablemente no lo sea.

Vaya, me perdí la parte sobre char. usarías int8_t en lugar de char si (y solo si) desea que se garantice un tipo entero de exactamente 8 bits de tamaño. Si desea almacenar caracteres, probablemente desee utilizar char en lugar de. Su tamaño puede variar (en términos de número de bits), pero se garantiza que sea exactamente de un byte. Sin embargo, una pequeña rareza: no hay garantía sobre si un simple char está firmado o sin firmar (y muchos compiladores pueden convertirlo en uno, dependiendo de un indicador de tiempo de compilación). Si necesita asegurarse de que esté firmado o no, debe especificarlo explícitamente.

  • @linuxfreak: No estoy seguro bool_t — Nunca oí de eso antes. El estándar C define _Bool como un tipo incorporado. bool se define sólo si usted #include <stdbool.h> (como una macro que se expande a _Bool).

    – Jerry Ataúd

    25 de enero de 2013 a las 5:41


  • Dijiste “para una implementación de 64 bits, (int) probablemente debería ser de 64 bits”. En la práctica, int es de 32 bits en todas las plataformas comunes de 64 bits, incluidas Windows, Mac OS X, Linux y varias versiones de UNIX. Una excepción es Cray/UNICOS, pero ya no están de moda.

    –Sam Watkins

    18 de noviembre de 2014 a las 5:53


  • @SamWatkins: Sí, por eso dije cuidadosamente “debería ser”, no “es”. El estándar dice que es “el tamaño natural sugerido por la arquitectura”, lo que (en mi opinión) significa que en un procesador de 64 bits, realmente deberían ser de 64 bits (aunque, para bien o para mal, tienes toda la razón en que normalmente no lo es). Desde un punto de vista más práctico, es es terriblemente útil tener un tipo de 32 bits entre los tipos en C89, y si int es de 64 bits, long también debe ser de al menos 64 bits, por lo que a menudo no habrá un tipo de 32 bits.

    – Jerry Ataúd

    18 de noviembre de 2014 a las 6:43

  • @barlop: Sí. (Tanto C como C++ exigen un rango mínimo de 255 valores para char, por lo que requiere al menos 8 bits, pero puede ser más).

    – Jerry Ataúd

    19/10/2015 a las 21:33

  • Siempre tuve la impresión de que un byte era exactamente de 8 bits, no de 8 bits en adelante.

    – Erl Volton

    21 de octubre de 2017 a las 1:41


Los tipos de datos _t son tipos typedef en el encabezado stdint.h, mientras que int es un tipo de datos fundamental incorporado. Esto hace que _t esté disponible solo si existe stdint.h. int, por otro lado, está garantizado que existe.

  • ¿Por qué uno usaría los _t?

    – Deven

    6 de noviembre de 2016 a las 0:11

  • @Deven Para evitar el caso en que su código funcione en algún lugar pero no en otro lugar.

    -Franklin Yu

    1 de febrero de 2017 a las 5:20

1646755329 732 Diferencia entre int32 int int32 t int8 e int8 t
Naumann

Siempre tenga en cuenta que el ‘tamaño’ es variable si no se especifica explícitamente, por lo que si declara

 int i = 10;

En algunos sistemas, el compilador puede generar un número entero de 16 bits y, en otros, puede generar un número entero de 32 bits (o un número entero de 64 bits en los sistemas más nuevos).

En entornos integrados, esto puede generar resultados extraños (especialmente al manejar E/S asignadas a la memoria o puede considerarse una situación de matriz simple), por lo que se recomienda especificar variables de tamaño fijo. En los sistemas heredados puede encontrar

 typedef short INT16;
 typedef int INT32;
 typedef long INT64; 

A partir de C99, los diseñadores agregaron el archivo de encabezado stdint.h que esencialmente aprovecha definiciones de tipos similares.

En un sistema basado en Windows, puede ver entradas en el archivo de encabezado stdin.h como

 typedef signed char       int8_t;
 typedef signed short      int16_t;
 typedef signed int        int32_t;
 typedef unsigned char     uint8_t;

Hay mucho más que eso, como tipos enteros de ancho mínimo o enteros de ancho exacto, creo que no es malo explorar stdint.h para una mejor comprensión.

  • Su código tiene un error tipográfico: typedef short INT16;no typedefs short INT16.

    – Galaxia

    25 de diciembre de 2017 a las 23:44


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad