signification des valeurs négatives de type char en C
- caractères en " C " sont utilisés pour représenter les caractères.
- Nombres représentant les caractères de toutes les pages de code sont toujours positives.
Quelle est l'utilité d'avoir signé des personnages?? Sont les valeurs négatives contenues dans les caractères utilisés uniquement en tant que partie intégrante des valeurs dans une petite intégrale de type de données de type int et court?? Ils n'ont pas d'autre interprétation??(comme les valeurs positives de caractères représentant des personnages)
Vous devez vous connecter pour publier un commentaire.
Pas toujours, les chars sont utilisés pour représenter des octets, ils sont le seul type en c avec une taille connue.
Erm... mal!?
Du standard C99, c'est moi qui souligne:
Il n'est pas garanti que tous les caractères valides de tout le code de la page sont positifs. Si
char
est signé ou non signé la mise en œuvre est définie!Seuls les personnages de l'exécution de base jeu de caractères sont garantis d'être non négatif (C99, 6.5.2 §3):
Vous avez de discerner entre la 'plaine'
char
type et les typessigned char
etunsigned char
ainsi:signed char
etunsigned char
sont d'ordinaire les types integer pour laquelle le suivant détient (C99, 6.5.2 §5):char
est signé sur votre plate-forme et que vous lisez un personnage avec un codepoint plus deCHAR_MAX
(disons un personnage comme æ en ISO-8859-1, qui a codepoint0xE6
), vous êtes susceptible d'obtenir un négatif char valeur.De Jack Klein de la Page d'Accueil:
De ce que je peux dire, il n'y a pas d'officiel "sens" de la
signed char
. Cependant, une chose d'être conscient, c'est que tous les caractères ASCII de l'automne dans le 0-127 gamme. Par conséquent, vous pouvez utiliser lesigned char
type de restreindre les valeurs de la 0-127 gamme, et de définir de rien de moins que 0 comme une erreur.Par exemple, si j'avais une fonction qui effectue des recherches sur certains de texte ASCII et les rendements les plus fréquentes de caractère, peut-être que je pourrais définir un rendement négatif de la valeur à dire qu'il y a deux ou plusieurs personnages à égalité pour le plus fréquent. Ce n'est pas forcément une bonne façon de faire les choses, c'est juste un exemple sur le dessus de ma tête.
char
:unsigned char
,signed char
etchar
. Les deux premiers sont explicites et utilisées pour manipuler le plus petit type de données numérique. Cependant,char
, est définie par l'implémentation de savoir s'il est signé ou non signé. En résumé, lorsque le signe est importante, ajouter le qualificatif.Il suffit de se méfier de l'utilisation de plaine caractères comme les indices de tableau.
Il est intéressant de noter que le char est un type distinct de deux signed char et unsigned char.
En C et C++ caractères peuvent être signés ou non signés. Une variable char peut être utilisé pour tenir une petite valeur entière. C'est utile pour plusieurs raisons:
En C, un caractère littéral est une constante entière. "0" est égal à 48.
'0'
peut ou peut ne pas être 48. C'est un petit entier, capables de tenir dans unchar
, mais il n'a pas besoin d'être 48.En C, un
char
(y comprissigned char
etunsigned char
) est utilisé pour stocker une octet, dont le C standard définit comme un petit entier au moins 8 bits.Avoir signés et non signés octets est aussi utile que d'avoir de plus grands nombres entiers. Si vous êtes de stocker un très grand nombre de petits chiffres (0..255 pour les non signé, -127..127 pour la signature de[1]) dans un tableau, vous pouvez préférer utiliser octets pour eux, plutôt que, disons, court ints, pour économiser de l'espace.
Historiquement, un octet et un caractère de texte ont été à peu près la même chose. Puis quelqu'un a réalisé il y a plus de langues que l'anglais. Ces jours-ci, le texte est beaucoup plus compliqué, mais il est trop tard pour changer le nom de la
char
type de C.[1] -128..127 pour les machines avec en complément à deux de la représentation des nombres négatifs, mais la norme ne garantit pas que.
int
est "la taille naturelle suggéré par l'architecture de l'environnement d'exécution" (C++11 §3.9.1/2). Si la norme peut définir le terme de machine-parole, mais pas de la machine-octet.char
n'est même pas la plus petite mémoire adressable de l'unité. Par exemple, pour définir un 4-bit char utilisationstruct char4 { unsigned int c : 4; }