Définir un nombre entier de 16 bits en C
je dois déclarer un entier de la taille de 16 bits, en C.
je sais que les tailles courte et int dépendent de la machine.
j'ai essayé d'utiliser "stdint.h",
mais il semble qu'ils n'ont tout simplement
typedef short int16_t
Donc ma question est:
est-ce que je manque quelque chose et le type court garantit une longueur de 16 bits?
si non, y a-t-il une alternative qui le garantit?
4 réponses
cela signifie int16_t
est définie comme short
machine, pas toutes les machines.
int16_t
où vous avez absolument besoin d'un type entier 16bit; il sera défini comme approprié sur toutes les plateformes qui fournissent stdint.h
(ce qui devrait être tout ce qui supporte C99, ou cstdint
pour C++).
[Edit] Pour préciser,"stdint.h
" le fichier d'en-tête est fourni par le compilateur C (ou C++), de sorte que son contenu variera probablement par compilateur, version, système, architecture CPU,etc. Autrement dit, les auteurs de la suite de compilateurs savent exactement quels types ont Quelles tailles sur quels systèmes. Le fait de regarder ce fichier sur un seul système ne vous renseigne que sur les définitions d'une version particulière d'un compilateur particulier sur un OS particulier sur une architecture particulière (par exemple GCC 4.2 sur Darwin x86_64, ou Visual Studio sur WinNT Alpha, ou ICC sur Solaris IA32, etc.). Certains systèmes, en particulier ceux intégrés, peuvent avoir différentes tailles, de sorte qu'un short
peut ne pas être toujours 16 bits, et le compilateur connaîtrait la bonne taille à utiliser pour cette longueur de bits.
Si vous regardez le fichier stdint.h
sur un autre système les définitions peuvent être différentes, ou elles peuvent être les mêmes - mais son but est de fournir les définitions pour les types entiers de longueurs de bits garanties.
Non, short
garantie de longueur 16 bits. Les seules garanties concernant les types de données de base integer sont:
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
sizeof(char) == 1
(note:char
pourrait encore être plus de 8 bits!)SHRT_MIN <= -32767
etSHRT_MAX >= 32767
(impliqueshort
est d'au moins 16 bits)INT_MIN <= -32767
etINT_MAX >= 32767
(impliqueint
est d'au moins 16 bits)LONG_MIN <= -2147483647
etLONG_MAX >= 2147483647
(impliquelong
est au moins égale à 32 bits)LLONG_MIN <= -9223372036854775807
etLLONG_MAX >= 9223372036854775807
(impliquelong long
au moins 64 bits)
Le fait que short
est tapé à int16_t
machine signifie simplement qu'un short
16 bits sur de la machine. Cela ne signifie pas que la définition sera la même sur les machines des autres (ou même sur d'autres compile sur la même machine).
Si vous incluez <stdint.h>
, il permettra de définir int16_t
d'une certaine façon qui est garanti d'être un type qui est signé et 16 bits de large. Si vous avez besoin d'entiers de taille exacte, utilisez ces types de taille exacte.
chaque machine peut avoir ou ne pas avoir ces définitions disponibles.
le seul réel la façon sûre de le faire est via un contrôle de configuration ou quelque chose comme ça.
mais si int16_t existe (et configure le trouve) alors il devrait être un short sur les machines où un short est en effet 16 bits. Si un short est une taille différente, alors ce système définirait int16_t à quelque chose d'autre pour vous. IE, si int16_t est disponible, vous pouvez en toute sécurité supposer qu'il fait 2 octets de long.
short
n'est assuré d'être au moins 16-bit
large.
C'est peut-être 16-bit
large dans votre système, mais 32-bit
dans un autre système.