tipos rangos que programacion long lenguaje datos conversion c portability

rangos - Cómo declarar un entero de 32 bits en C



tipos de variables en lenguaje c (9)

C99 o posterior

Use <stdint.h> .

Si su implementación es compatible con enteros de 2 bits de 32 bits, debe definir int32_t .

Si no es así, la mejor int_least32_t es int_least32_t que es un tipo entero admitido por la implementación que tiene al menos 32 bits, independientemente de la representación (complemento de dos, complemento de uno, etc.).

También hay int_fast32_t que es un tipo entero de al menos 32 bits de ancho, elegido con la intención de permitir las operaciones más rápidas para ese requisito de tamaño.

ANSI C

Puede usar long , que se garantiza que tendrá al menos 32 bits de ancho como resultado de los requisitos mínimos de rango especificados por el estándar.

Si prefiere usar el tipo de entero más pequeño para ajustarse a un número de 32 bits, puede usar declaraciones de preprocesador como las siguientes con las macros definidas en <limits.h> :

#define TARGET_MAX 2147483647L #if SCHAR_MAX >= TARGET_MAX typedef signed char int32; #elif SHORT_MAX >= TARGET_MAX typedef short int32; #elif INT_MAX >= TARGET_MAX typedef int int32; #else typedef long int32; #endif #undef TARGET_MAX

¿Cuál es la mejor manera de declarar un tipo entero que siempre es de 4 bytes en cualquier plataforma? No me preocupo por ciertos dispositivos o máquinas antiguas que tengan int 16 bits.


C no se preocupa mucho por los tamaños exactos de los tipos enteros, C99 introduce el encabezado stdint.h , que es probablemente su mejor opción. Incluya eso y puede usar, por ejemplo, int32_t . Por supuesto, no todas las plataformas podrían soportar eso.


La respuesta de Corey es correcta para "lo mejor", en mi opinión, pero un simple "int" también funcionará en la práctica (dado que está ignorando los sistemas con int de 16 bits). En este punto, tanto código depende de que int sea de 32 bits que los proveedores de sistemas no van a cambiarlo.

(Vea también por qué tiempo es de 32 bits en muchos sistemas de 64 bits y por qué tenemos "larga duración").

¡Uno de los beneficios de usar int32_t, sin embargo, es que no estás perpetuando este problema!


Necesita incluir inttypes.h lugar de stdint.h porque stdint.h no está disponible en algunas plataformas como Solaris, e inttypes.h incluirá stdint.h para usted en sistemas como Linux. Si incluye inttypes.h entonces su código es más portátil entre Linux y Solaris.

Este enlace explica lo que estoy diciendo: enlace de HP sobre inttypes.h

Y este enlace tiene una tabla que muestra por qué no desea utilizar long o int si tiene la intención de que haya un cierto número de bits presentes en su tipo de datos. Enlace de IBM sobre tipos de datos portátiles


Podría buscar una copia de brg_types.h de Brian Gladman si no tiene stdint.h .

brg_types.h descubrirá los tamaños de los diversos enteros en su plataforma y creará typedefs para los tamaños comunes: 8, 16, 32 y 64 bits.


Si stdint.h no está disponible para su sistema, haga el suyo. Siempre tengo un archivo llamado "types.h" que tiene typedefs para todos los valores de 8, 16 y 32 bits con signo / sin signo.


stdint.h es la elección obvia, pero no necesariamente está disponible.

Si está utilizando una biblioteca portátil, es posible que ya proporcione enteros portátiles de ancho fijo. Por ejemplo, SDL tiene Sint32 (S es para "firmado"), y GLib tiene gint32 .


también, dependiendo de las plataformas de destino, puede usar autotools para su sistema de compilación

verá si stdint.h / inttypes.h existe y, si no lo hace, creará typedefs apropiados en un "config.h"


#include <stdint.h> int32_t my_32bit_int;