De nombreuses questions demandent des différences entre les types entiers short
et int
en C++, mais en pratique, quand choisissez-vous short
plutôt que int
?
(Voir réponse d'Eric pour une explication plus détaillée)
Remarques:
int
est défini sur la 'taille naturelle' - la forme entière que le matériel gère le plus efficacementshort
dans un tableau ou dans des opérations arithmétiques, l'entier short
est converti en int
, ce qui peut donc influer sur la vitesse de traitement short
entiersshort
peut économiser de la mémoire si elle est plus étroite que int
, ce qui peut être important lors de l'utilisation d'un grand tableauint
32 bits par rapport à un système int
16 bitsConclusion:
int
sauf si la conservation de la mémoire est critique ou si votre programme utilise beaucoup de mémoire (par exemple, de nombreux tableaux). Dans ce cas, utilisez short
.Vous choisissez short
sur int
lorsque:
Soit
int
ou short
, qui peuvent varier en fonction de la plate-forme (comme vous voulez une plate-forme avec un _ 32 bits short
pour pouvoir lire un fichier écrit sur une plateforme avec un short
) 16 bits. Les bons candidats sont les types définis dans stdint.h .Et:
short
sur votre plate-forme cible (pour un _ 16 $ short
, c'est -32768
-32767
, ou 0
-65535
pour un 16 bits unsigned short
).short
que pour un int
. La norme garantit seulement que short
est pas plus grand que int
, donc les implémentations sont autorisées à avoir la même taille pour un short
et pour un int
.Remarque:
char
s peut également être utilisé comme type arithmétique. Une réponse à "Quand devrais-je utiliser char
au lieu de short
ou int
?" se lirait de manière très similaire à celle-ci, mais avec numéros différents (-128
-127
pour un _ 8 $ char
, 0
-255
pour un 8 bits unsigned char
)
En réalité, vous ne voulez probablement pas utiliser spécifiquement le type short
. Si vous voulez un entier de taille spécifique, il existe des types définis dans <cstdint>
qui devrait être préféré, comme, par exemple, un int16_t
sera de 16 bits sur chaque système, alors que vous ne pouvez pas garantir que la taille d'un short
sera la même pour toutes les cibles pour lesquelles votre code sera compilé.
En général, vous ne préférez pas short
à int
.
Le type int est la taille Word native du processeur
Habituellement, un int
est la taille Word du processeur.
Par exemple, avec un processeur de taille de mot 32 bits, un int
serait de 32 bits. Le processeur est plus efficace en utilisant 32 bits. En supposant que short
est de 16 bits, le processeur récupère toujours 32 bits de la mémoire. Donc pas d'efficacité ici; en fait, c'est plus long car le processeur peut avoir à décaler les bits à placer dans la bonne position dans un mot 32 bits.
Choix d'un type de données plus petit Il existe des types de données normalisés de longueur spécifique au bit, tels que uint16_t
. Ceux-ci sont préférés aux types ambigus de char, short,
et int
. Ces types de données spécifiques à la largeur sont généralement utilisés pour accéder au matériel ou pour compresser l'espace (comme les protocoles de message).
Choisir une gamme plus petite
Le type de données short
est basé sur plage et non sur la largeur de bits. Sur un système 32 bits, short
et int
peuvent avoir la même longueur 32 bits.
Une fois que la raison d'utiliser short
est parce que la valeur ne dépassera jamais une plage donnée. Il s'agit généralement d'une erreur car les programmes changeront et le type de données pourrait déborder.
Résumé
Actuellement, je n'utilise plus short
. J'utilise uint16_t
lorsque j'accède à des périphériques matériels 16 bits. J'utilise unsigned int
pour les quantités, y compris les indices de boucle. J'utilise uint8_t
, uint16_t
et uint32_t
lorsque la taille est importante pour le stockage des données. Le type de données short
est ambigu pour le stockage de données, car il s'agit d'un minimum. Avec l'avènement des fichiers d'en-tête stdint
, il n'y a plus besoin de short
.
Si vous n'avez pas de contraintes spécifiques imposées par votre architecture, je dirais que vous pouvez toujours utiliser int
. Le type short
est destiné à des systèmes spécifiques où la mémoire est une ressource précieuse.