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: ¡unchar
aún podría tener más de 8 bits!) -
SHRT_MIN <= -32767
ySHRT_MAX >= 32767
(implica queshort
es al menos 16 bits) -
INT_MIN <= -32767
eINT_MAX >= 32767
(implica queint
es al menos 16 bits) -
LONG_MIN <= -2147483647
yLONG_MAX >= 2147483647
(implica quelong
es al menos 32 bits) -
LLONG_MIN <= -9223372036854775807
yLLONG_MAX >= 9223372036854775807
(implica quelong 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.