Relation entre la longueur de mot, la taille des caractères, la taille de l'entier et l'octet

StackOverflow https://stackoverflow.com/questions/698312

  •  22-08-2019
  •  | 
  •  

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 ++?

Était-ce utile?

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 que int
  • int doit être au moins aussi grande que short
  • short doit être au moins aussi grande que char

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top