Relation entre la longueur de mot, la taille des caractères, la taille de l'entier et l'octet
Question
Quelle est la relation entre la longueur de mot, la taille des caractères, la taille de l'entier, et l'octet en C ++?
La solution
La norme exige que certains types ont minimum tailles (court-circuit est au moins 16 bits, int est d'au moins 16 bits, etc.), et que certains groupes de type sont commandés (sizeof(int)
> = sizeof(short)
> = sizeof(char)
).
Autres conseils
En C ++ char doit être assez grand pour contenir tous les caractères dans le jeu de caractères de base de l'Implémentation.
int
a la « taille naturelle proposée par l'architecture de l'environnement d'exécution ». Notez que cela signifie qu'un int fait pas doivent être au moins 32 bits de taille. Où est int
Implémentations 16 bits sont communs (pensez intégrés ot MS-DOS).
Ci-dessous sont extraites de diverses parties du 98 C ++ et normes C99:
-
long int
doit être au moins aussi grande queint
-
int
doit être au moins aussi grande queshort
-
short
doit être au moins aussi grande quechar
Notez qu'ils pourraient tous être de la même taille.
En outre (en supposant une mise en œuvre du complément de deux):
-
long int
doit être d'au moins 32 bits -
int
doit être d'au moins 16 bits -
short
doit être d'au moins 16 bits -
char
doit être d'au moins 8 bits
La norme ne sait pas ce « mot » Thingy utilisé par les processeurs. Mais il dit le type « int » devrait avoir la taille naturelle pour un environnement d'exécution. Mais même pour les environnements 64 bits, int est généralement seulement 32 bits. Donc, « mot » en termes standard a à peu près pas de sens commun (sauf pour le commun anglais « mot » bien sûr).
taille du caractère est la taille d'un caractère. Cela dépend de quel personnage vous parlez. types de caractères sont char, unsigned char et signed char. Aussi wchar_t est utilisé pour stocker les caractères qui peuvent avoir une taille (déterminée par la mise en œuvre - mais doit utiliser l'un des types entiers comme son type sous-jacent Tout comme énumérations.), Alors que char / signed char ou unsigned char doit avoir un octet. Cela signifie qu'un octet a autant de bits que l'un de carbonisation a. Si une implémentation dit un objet de type char a 16 bits, puis un octet a trop 16 bits.
Maintenant un octet est la taille que l'on occupe omble chevalier. Il est une unité, pas un type spécifique. Il n'y a pas beaucoup plus à ce sujet, il est juste que l'unité que vous pouvez accéder à la mémoire. I.e. vous ne disposez pas d'un accès pointeur vers les champs de bits, mais vous avez accès à des unités à partir d'un octet.
« Taille entière » est maintenant assez large. Que voulez-vous dire? Tous bool, char, short, int, long et leurs homologues unsinged sont des nombres entiers. Leur gamme est ce que je qualifierais de « taille entière » et il est documenté dans la norme C - prise en charge par la norme C ++. Pour signed char la plage est comprise entre -127 <-> 127, pour court et INT est la même et est de -2 ^ 15 + 1 <-> 2 ^ 15-1 et pendant longtemps, il est -2 ^ 31 + 1 < -> 2 ^ 31-1. Leurs homologues non signés vont de 0 à 2 ^ 8-1, 2 ^ 16-1 et 2 ^ 32-1 respectivement. Ce sont cependant tailles minimales. Autrement dit, un entier ne peut pas avoir la taille maximale 2 ^ 14 sur toute plate-forme, parce que c'est inférieur à 2 ^ 15-1 bien sûr. Il en résulte pour ces valeurs qui est nécessaire un minimum de bits. Pour ombles qui est 8, pour faire court / int qui est 16 et pour longtemps qui est 32. représentation en complément à deux pour les nombres négatifs n'est pas nécessaire, ce qui explique pourquoi la valeur négative n'est pas -128
au lieu de -127
par exemple pour signed char.
Standard C ++ ne dispose pas d'un type de données appelé word
ou byte
. Le reste est bien définie comme les plages. La base est un char
qui a de bits de CHAR_BITS
. La valeur la plus couramment utilisée est CHAR_BITS 8.
sizeof (char) == 1 (un octet) (en C ++, en C - non spécifié)
sizeof (int)> = sizeof (char)
mot - pas c ++ type usualy dans l'architecture informatique que cela signifie 2 octets
dépend sorte de ce que vous entendez par la relation. La taille des types numériques est généralement un multiple de la taille de mot machine. Un octet est un octet est un octet - 8 bits, ni plus, ni moins. Un personnage est défini dans la norme comme un seul octet non signé, je crois que (vérifiez votre ARM pour les détails).
La règle générale est, ne font pas d'hypothèses sur la taille réelle des types de données. La norme spécifie les relations entre les types tels qu'un « long » entier sera soit la même taille ou plus grand qu'un « int ». implémentations individuelles de la langue vont choisir des tailles spécifiques pour les types qui conviennent pour eux. Par exemple, un compilateur pour un processeur 64 bits choisira différentes tailles qu'un compilateur pour un processeur 32 bits.
Vous pouvez utiliser l'opérateur sizeof () pour examiner les tailles spécifiques pour le compilateur que vous utilisez (sur l'architecture cible spécifique).