"es siempre de 32 bits en más plataformas" - lo que está mal con ese fragmento? :-)
El estándar C no exige el tamaño de sus variables. Es hace tamaños relativos de mandato, por ejemplo, sizeof(int) >= sizeof(short)
y así sucesivamente. También exige intervalos mínimos, pero permite múltiples esquemas de codificación (complemento de dos, complemento de uno, y signo/magnitud).
Si desea un tamaño variable específica, es necesario utilizar una adecuada para la plataforma que se está ejecutando en, tales como el uso de #ifdef
's, algo así como:
#ifdef LONG_IS_32BITS
typedef long int32;
#else
#ifdef INT_IS_32BITS
typedef int int32;
#else
#error No 32-bit data type available
#endif
#endif
Alternativamente, C99 permite para este tipo de anchura enteros exactas intN_t
y uintN_t
:
- El nombre typedef
intN_t
designa un tipo entero firmado con wi dth N
, sin relleno bits, y una representación complementaria de dos. Por lo tanto, int8_t
denota un entero con signo tipo con un ancho de exactamente 8 bits.
- El nombre typedef
uintN_t
designa un tipo de entero sin signo con ancho N
. Por lo tanto, uint24_t
denota un tipo entero sin signo con un ancho de exactamente 24 bits.
- Estos tipos son opcionales.Sin embargo, si una implementación proporciona tipos enteros con anchuras de 8, 16, 32 o 64 bits, sin bits de relleno y (para los tipos con signo) que tienen una representación complementaria de dos , definirá los nombres typedef correspondientes.
Hay procesadores modernos de 8 y 16 bits, pero no en el entorno de PC. – Gerhard