web-dev-qa-db-fra.com

Quelle est la différence entre uint16_t et unsigned short int en cas de processeur 64 bits?

Je suis arrivé à utiliser une variable de type uint16_t, mais je ne peux pas utiliser ce type de données en raison des limites de mon projet. Est-ce possible de unsigned short int au lieu de uint16_t? Je ne connais pas la différence entre les deux. Quelqu'un pourrait-il préciser s'il vous plaît?

26
Chinna

uint16_t est un entier non signé de 16 bits.

unsigned short int est un entier court non signé, mais sa taille dépend de la mise en œuvre. La norme dit seulement qu’elle est au moins 16 bits (c’est-à-dire que la valeur minimale de UINT_MAX est 65535). En pratique, il s'agit généralement de 16 bits, mais vous ne pouvez pas considérer cela comme garanti.

Remarque:

  1. Si vous voulez un entier portable 16 bits non signé, utilisez uint16_t.
  2. inttypes.h et stdint.h sont tous deux introduits dans C99. Si vous utilisez C89, définissez votre propre type.
  3. uint16_t peut ne pas être fourni dans certaines mises en œuvre (voir la référence ci-dessous), mais unsigned short int est toujours disponible.

Référence: C11 (ISO/IEC 9899: 201x) §7.20 Types de nombre entier

Pour chaque type décrit ici fourni par l’implémentation) doit déclarer ce nom de typedef et définir les macros associées. Inversement, pour chaque type décrit ici que l’implémentation ne fournit pas, ne doit pas déclarer ce nom typedef ni définir les macros associées. Une implémentation doit fournir les types décrits comme "‘ requis ", mais n’a besoin de fournir aucun des autres (décrits comme" optionnel ").

44
Yu Hao

uint16_t est garanti être un entier non signé de 16 bits

unsigned short int est garanti d'être un non-signé short integer, où short integer est défini par le compilateur (et éventuellement les indicateurs de compilateur) que vous utilisez actuellement. Pour la plupart des compilateurs pour matériel x86, un short integer a une taille de 16 bits.

Notez également que, par norme ANSI C , seule la taille minimale de 16 bits est définie, la taille maximale étant laissée au développeur du compilateur.

Limites de type minimales

Tout compilateur conforme à la norme doit également respecter les limites suivantes en ce qui concerne la plage de valeurs qu'un type particulier peut accepter. Notez qu'il s'agit de limites inférieures: une implémentation est libre de dépasser tout ou partie de celles-ci. Notez également que la plage minimale pour un caractère dépend du fait qu'un caractère est considéré comme signé ou non.

Type Plage minimale

signed char     -127 to +127
unsigned char      0 to 255
short int     -32767 to +32767
unsigned short int 0 to 65535
19
Scott Chamberlain