La taille de char, int, long double ... peut varier d'un compilateur à l'autre. Mais ai-je la garantie selon la norme C++ 11 ou C11 que la taille de tout type intégral fondamental signé et non signé est la même?Ai-je la garantie que sizeof (type) == sizeof (type non signé)?
Répondre
Le 11 C++ standard dit sur les types entiers:
(§3.9.1/3) Pour chacun des types entiers standard signé, il existe un correspondant (mais différent) standard de type entier non signé : «Unsigned char», «unsigned short int», «unsigned int», «unsigned long int» et «unsigned long long int», chacun occupant la même quantité de stockage et ayant les mêmes exigences d'alignement (3.11) que le type entier signé correspondant; c'est-à-dire que chaque type entier signé a la même représentation d'objet que son type entier non signé correspondant. De même, pour chacun des types entiers étendus signés, il existe un type entier non signé étendu correspondant avec la même quantité d'exigences de stockage et d'alignement. [...]
Donc la réponse est oui.
Pour C11, il y a une déclaration correspondante ici (ce qui est de N1570):
(§6.2.5/6) Pour chacun des types entiers signés, il y a un correspondant (mais différent) Type entier non signé (désigné avec le mot-clé non signé) qui utilise la même quantité de stockage (y compris les informations de signe) et a les mêmes exigences d'alignement [...]
Oui, il y a une garantie complète qui sizeof (type signé) est égal à sizeof (type non signé puisque unsigned ne prend que l'espace des nombres négatifs de type signé pour augmenter sa portée.
Rien dans la norme exige que «UINT_MAX > INT_MAX'; Les machines de magnitude-signe peuvent les rendre égales. – supercat
- 1. sizeof (value) vs sizeof (type)?
- 2. Sizeof Struct vs Sizeof type
- 3. Taille du tampon: N * sizeof (type) ou sizeof (var)? C++
- 4. spécialisation de gabarit selon sizeof type
- 5. application non valide de 'sizeof' à un type incomplet
- 6. sizeof (long) vs sizeof (* lp)
- 7. C++ Comment obtenir sizeof (enum) == sizeof (char)?
- 8. Pourquoi sizeof (double non signé) est égal à 4?
- 9. Que fait sizeof?
- 10. Que fait sizeof (char *)?
- 11. Sizeof rapports incorrect Taille de la structure définie type -
- 12. C# sizeof decimal?
- 13. Différence entre sizeof (* ptr) et sizeof (struct)
- 14. C++ sizeof (...)
- 15. Quelle est la taille de (principal), sizeof (printf), sizeof (scanf)?
- 16. Est-ce que sizeof renvoie le nombre d'octets ou le nombre d'octets d'un type dans C?
- 17. PROCESSENTRY32 .dwSize et sizeof
- 18. Pourquoi sizeof (a) 16? (sizeof int is 4)
- 19. Pourquoi sizeof Variablename/sizeof * VariableName ne fonctionne pas comme souhaité?
- 20. Sizeof vide classe
- 21. Est-ce que sizeof (bool) est défini?
- 22. sizeof sur l'argument
- 23. VBA Équivalent de Sizeof()?
- 24. sizeof() est-il récursif?
- 25. sizeof() structures inconnues. Pourquoi?
- 26. sizeof dans struct
- 27. problème avec l'opérateur sizeof
- 28. opérateur sizeof dans c
- 29. sizeof java object
- 30. sizeof un membre struct
Je devrais l'espérer, à moins qu'il y ait en quelque sorte un type pour lequel l'inégalité a du sens, auquel cas, je serais heureux de l'entendre. – chris
De même, sizeof char est toujours 1. char peut avoir une taille inhabituelle, comme 16 bits, mais sizeof char serait toujours 1 et sizeof un type 32 bits serait 2. –