initialize float dev data c integer 16-bit stdint

float - Definir entero de 16 bits en C



int size c++ (4)

Cada máquina puede o no tener esas definiciones disponibles.

La única forma segura de hacerlo es a través de un cheque de configuración o algo así.

Pero si existe int16_t (y configure lo encuentra), entonces debería ser un corto en máquinas donde un short es 16 bits. Si un short es de un tamaño diferente, entonces ese sistema definiría int16_t a algo más para usted. IE, si int16_t está disponible, puede asumir con seguridad que tiene 2 bytes de longitud.

Necesito declarar un entero en el tamaño de 16 bits, en C.

Sé que los tamaños cortos e int son dependientes de la máquina.

Traté de usar "stdint.h", pero parece que simplemente lo hacen

typedef short int16_t

Así que mi pregunta es:

¿Me falta algo y el tipo corto garantiza 16 bits de longitud?

Si no, ¿hay alguna alternativa que lo garantice?


Eso significa que int16_t se define como short en su máquina, no todas las máquinas.

Simplemente use el int16_t donde absolutamente necesita un tipo entero de 16 bits; se definirá según corresponda en todas las plataformas que proporcionen stdint.h (que debería ser todo lo que sea compatible con C99, o cstdint para C ++).

[Editar] Para aclarar, el archivo de encabezado " stdint.h " lo proporciona el compilador C (o C ++), por lo que su contenido probablemente variará según el compilador, la versión, el sistema, la arquitectura de la CPU, etc. Es decir, los autores de el conjunto de compiladores sabe exactamente qué tipos tienen qué tamaños en qué sistemas. Ver ese archivo en un solo sistema solo le informa acerca de las definiciones para una versión particular de un compilador particular en un sistema operativo particular en una arquitectura particular (por ejemplo, GCC 4.2 en Darwin x86_64, o Visual Studio en WinNT Alpha, o ICC en Solaris IA32) , etc). Algunos sistemas, especialmente los incrustados, pueden tener diferentes tamaños de tipo, por lo que un short no siempre puede ser de 16 bits, y el compilador sabría cuál es el tamaño correcto para usar para esa longitud de bit.

Si observa el archivo stdint.h en otro sistema, las definiciones podrían ser diferentes o podrían ser las mismas, pero su propósito es proporcionar las definiciones para los tipos enteros de longitudes de bits garantizadas.


No, el short no garantiza una longitud de 16 bits. Las únicas garantías sobre los tipos de datos enteros básicos son:

  • sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
  • sizeof(char) == 1 (nota: ¡un char aún podría tener más de 8 bits!)
  • SHRT_MIN <= -32767 y SHRT_MAX >= 32767 (implica que short es al menos 16 bits)
  • INT_MIN <= -32767 e INT_MAX >= 32767 (implica que int es al menos 16 bits)
  • LONG_MIN <= -2147483647 y LONG_MAX >= 2147483647 (implica que long es al menos 32 bits)
  • LLONG_MIN <= -9223372036854775807 y LLONG_MAX >= 9223372036854775807 (implica que long long es al menos 64 bits)

(C99 §5.2.4.2.1 y Anexo E)

El hecho de que short se haya definido para int16_t en su máquina solo significa que un short es de 16 bits en su máquina. No significa que la definición sea la misma en las máquinas de otras personas (o incluso en otras compilaciones en su misma máquina).

Si incluye <stdint.h> , definirá int16_t de alguna manera que se garantiza que sea un tipo que está firmado y tiene 16 bits de ancho. Si necesita enteros de tamaño exacto, use esos tipos de tamaño exacto.


Solo se garantiza que el short sea ​​de al menos 16-bit ancho.

Puede tener 16-bit ancho de 16-bit en su sistema, pero de 32-bit en otro sistema.