Je lis Le langage de programmation C++ et Stroustrup indique que la valeur int d'un char peut aller de 0 à 255 ou de -127 à 127, selon l'implémentation. Est-ce correct? Il semble que cela devrait être de -128 à 127. Sinon, pourquoi leurs seules 255 valeurs possibles dans la deuxième possibilité d'implémentation, pas 256.plage pour les valeurs entières de caractères en C++
Répondre
Vous êtes coincé dans two's complement penser - La norme C++ ne définit pas le représentation utilisée pour les nombres négatifs!
Si votre ordinateur (Dieu interdit) utilise ones's complement pour représenter des nombres négatifs, vous avez une plage de -127 à +127 dans un octet de 8 bits. A la hausse, vous avez deux représentations possibles différentes pour zéro ...
Cependant, dans le monde réel, you're unlikely to meet a one's complement computer.
Bon point. J'avais oublié le compliment de 1: –
À la lecture de ce qu'il semble, il peut être l'un de ceux, en fonction de la mise en œuvre.
Merci Roddy et Esteban Brenes pour les réponses utiles.
Ceci est ma compréhension actuelle:
Il y a trois possibilités. Si les valeurs sont représentées comme non signées, un caractère sera compris entre 0 et 255. Si les valeurs sont représentées comme signées dans le complément à deux, un caractère va de -128 à 127. Enfin, si les valeurs sont représentées comme signées dans le complément , un char va de -127 à 127. Cette dernière possibilité suggère qu'il n'y aurait que 255 valeurs possibles contrairement aux 256 valeurs possibles pour les deux premières implémentations, mais cela ne prend pas en compte le zéro négatif dans les représentations du complément .
Il est faux de penser qu'un char non signé est compris entre 0 et 255. C'est seulement sa portée minimale. un char doit avoir au moins 8 bits, et char signé, char non signé et char lui-même peut en effet avoir plus que 8 bits. alors cela signifie que char non signé pourrait aller au-delà de 255. bien que je reconnaisse que je n'ai pas eu une implémentation où il y avait plus de 8 bits, c'est théoriquement possible. cela est spécifié dans la norme c89 (sur laquelle C++ 03 bases), documentant les limites du fichier. h (CHAR_BIT, UCHAR_MAX, CHAR_MAX).
Ceci est vrai. J'ai travaillé avec des processeurs DSP embarqués où char, short, int et long sont tous 32 bits. – ChrisN
Parce que la norme ne dit rien sur le type de char, "char" peut être:
"unsigned char" (0-255) sur certains compilateurs (exemple: TexasInstruments compilateur pour leur ARM processeurs - série OMAP)
"signed char" (-128 à 127) sur la plupart des compilateurs (gcc, MSVC ...)
Pour vous assurer que vous avez toujours une gamme bien définie, vous devriez utilisation "char signé" ou "char non signé".
- 1. valeurs entières DETERMINATION Obj-C avec isKindOfClass
- 2. valeurs entières d'écriture dans le fichier binaire
- 3. Autoriser les valeurs entre guillemets dans les colonnes entières mysql?
- 4. Pour obtenir une plage de valeurs
- 5. Ne pas renvoyer les valeurs entières de la table
- 6. Comment faire pour alerter des valeurs entières dans Flex?
- 7. Génération d'histogrammes simples de données entières en C#
- 8. Plage de valeurs de retour .ToARGB()
- 9. Expression régulière pour correspondre à une plage de valeurs décimales
- 10. déterminer la plage de valeurs du type de modèle en C++
- 11. Touches/Valeurs Fonctionnalité pour les itérateurs en C++
- 12. Codage de caractères pour les caractères thaïs
- 13. Saisie de caractères dans les tableaux en C- suivi
- 14. Arrondir les valeurs décimales en C#
- 15. L'argument spécifié était hors de la plage des valeurs valides
- 16. Caractères Unicode dans MySQL retournant différentes valeurs de code de caractères en PHP et ASP
- 17. caractères NUL de Marshal.Copy en C#
- 18. Plage de dates En PHP?
- 19. caractères de type double en C++
- 20. comment générer des graphiques en utilisant des valeurs entières dans iphone
- 21. Utilisation des valeurs de plage avec la recherche
- 22. Alignement de caractères avec un ListView de OwnerDraw en C#
- 23. Charger une plage de tableaux (C#)
- 24. Analyse d'une plage de dates en C# - ASP.NET
- 25. Vérification d'une chaîne pour les caractères corrects dans c
- 26. Hashtables (dictionnaire etc) avec des touches entières
- 27. Comparer les valeurs de deux structures en C#
- 28. Comment sélectionner une plage de caractères dans une zone de texte en utilisant Javascript?
- 29. C++ caractères Ascii étendus
- 30. Méthode pour substituer l'étranger pour les caractères anglais en Java?
Avez-vous une idée de la raison pour laquelle la plage d'entiers est comprise entre -128 et 127 et pas entre -127 et 128? – user1437027