Quelle est l'utilisation d'avoir signé des caractères ?? Sont des valeurs négatives contenues dans des caractères utilisés uniquement comme des valeurs intégrales dans un type de données intégré plus petit que INT et court ?? N'ont-ils pas d'autre interprétation ?? (comme des valeurs positives en caractères représentant des caractères) p>
8 Réponses :
caractères dans 'c' sont utilisés pour représenter des caractères. P> blockQuote>
Pas toujours, les caractères sont utilisés pour représenter des octets, ils sont le seul type en C avec une taille connue. P>
Si vous voulez dire qu'ils sont le seul type où la taille de (type) est garantie 1, oui. Ils ne sont pas garantis pour être 8 bits.
La seule chose qui raconte la taille d'un caractère, c'est que c'est 1. Cela ne dit pas quelles sont les unités de 1.
PDP-10, par exemple, d'octets de 9 bits utilisés.
Les normes C89 et C99 garantissent toutefois que le caractère de garantie est d'au moins 8 bits. Pourrait être plus, pourrait être signé ou non signé.
@David, oui L'utilisation principale de Char est d'avoir une taille de 1 octet lorsque vous expédiez des objets binaires autour. Le nombre de bits n'a pas d'importance.
@Davidthornley Ils sont garantis comme des bits Char_bit et Char_bit est un peu connu.
de Page d'accueil de Jack Klein : P >
Char signé peut contenir toutes les valeurs de la plage de SCHAR_MIN à SCHAR_MAX, définie dans LIMITS.H. SCHAR_MIN doit être -127 ou moins (plus négatif) et Schar_max doit être de 127 ou plus. Notez que de nombreux compilateurs pour les processeurs qui utilisent une représentation complémentaire de 2 SCHAR_MIN de -128 de -128, mais cela n'est pas requis par les normes. P> blockQuote>
De ce que je peux dire, il n'y a pas de "sens" officiel de
signé Char code>. Cependant, une chose à conscience est que tous les caractères ASCII normaux tombent dans la plage 0-127. Par conséquent, vous pouvez utiliser le type
signé Char code> pour limiter les valeurs légales à la plage 0-127 et définir quelque chose de moins de 0 comme une erreur. P>
Par exemple, si j'avais une fonction qui recherche un texte ASCII et renvoie le caractère le plus fréquemment survenant, je pourrais peut-être définir une valeur de retour négative pour signifier qu'il y a deux caractères ou plus liés pour le plus fréquent. Ce n'est pas nécessairement un bon moyen de faire des choses, c'est juste un exemple du sommet de ma tête. P>
Très simple, il existe 3 types de char code>:
non signé Char code>,
signé Char code> et
Char code>. Les deux premiers sont explicites et utilisés pour manipuler le plus petit type de données numérique. Toutefois,
Char code> est défini la mise en œuvre s'il est signé ou non signé. En résumé, lorsque le signe est important, ajoutez le qualificatif.
dans les caractères C et C ++ peuvent être signés ou non signés. Une variable de caractère peut être utilisée pour contenir une petite valeur entière. Ceci est utile pour plusieurs raisons: P>
en C, un littéral de caractère est une constante entière. '0' est égal à 48. p>
NIT: '0' code> peut être 48. C'est un petit entier, capable de s'adapter à un
Char code>, mais il n'est pas nécessaire de ne pas être 48.
Tu m'as eu. J'ai oublié d'Ebcdic. ;-)
Richard, il y a toujours la mort de la mort 9000 [ DialSpace.dial.pipex .Com / Prod / DialSpace / Town / Green / GFD34 / Art ] :)
Les numéros représentant des caractères dans toutes les pages de code sont toujours positifs. P> blockQuote>
erm ...
faux fort>!? p> de la norme C99, mettez l'accent sur la mine: p>
Si un membre
de l'ensemble de caractères d'exécution de base fort> est stocké dans un objet de caractère, sa valeur est garantie pour être positive. P> blockQuote> Il n'est pas garanti que tous les caractères valides de toutes les pages de code sont positifs. Si
Char code> est signé ou non signé est la mise en œuvre définie! P>
Seuls les caractères de l'ensemble de caractères d'exécution de base sont garantis pour être non négatifs (C99, 6.5.2 §3): P>
Un objet déclaré comme type Char est assez grand pour stocker n'importe quel membre de le jeu de caractères d'exécution de base. Si Un membre de l'exécution de base Le jeu de caractères est stocké dans un char objet, sa valeur est garantie d'être non négatif. Si un autre caractère est stocké dans un objet de caractère, le résultat résultant la valeur est définie par la mise en œuvre mais doit être dans la gamme de valeurs qui peut être représenté dans ce type. P> blockQuote>
Vous devez discerner entre le type "CODE" PLAIN '
CHAR CODE> et les types
SIGNÉ Char code> et
non signé Char code> aussi:
Signé Char code> et
Unsigné Char CODE> sont des types d'entiers ordinaires pour lesquels les détentements suivants (C99, 6.5.2 §5): P>
Un objet déclaré comme type signé Char occupe la même quantité de stockage que '' 'Un simple' '' objet de caractère. P> blockQuote>
En outre, si Char code> est signé sur votre plate-forme et que vous lisez un caractère avec un point de code de code de code supérieur à
char_max code> (dites un caractère comme æ dans ISO-8859-1, qui a CodePoint
0XE6 CODE>), vous êtes assez susceptible d'obtenir une valeur de caractère négative.
in c, un ayant signé et non signé des octets est aussi utile que d'avoir des entiers plus importants. Si vous stockez un très grand nombre de petits nombres (0..255 pour non signé, -127..127 pour signé [1]) dans une matrice, vous préférez utiliser des octets pour eux plutôt que, dire, courts intenses , pour économiser de l'espace. P>
Historiquement, un octet et un personnage de texte étaient à peu près la même chose. Ensuite, quelqu'un réalisa qu'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 du type [1] -128..127 pour les machines avec une représentation de deux compléments pour les nombres négatifs, mais la norme C ne garantit pas que. P> char code> (y compris
signé Char code> et
non signé Char code>) est utilisé pour stocker un octet d'octet fort> , que la norme C définit comme un petit nombre d'au moins 8 bits de taille. P>
char code> c. P>
En fait, le terme der terme "octet" est défini nulle part. Dans C / C ++, les caractères sont des séquences de bits, de même que tout objet. Mais int code> est "la taille naturelle suggérée par l'architecture de l'environnement d'exécution" (C ++ 11 §3.9.1 / 2). La norme peut donc définir le terme mot-mot, mais pas la machine-octet.
Char code> n'est même pas la plus petite unité de mémoire adressable. Par exemple, pour définir une utilisation
struct char4 {non signée Int C: 4; } code>
Méfiez-vous d'utiliser way em> caractères sous forme d'index de tableau. char buf[10000];
fgets(buf, sizeof buf, stdin);
unsigned charcount[UCHAR_MAX] = {0};
char *p = buf;
while (*p) {
charcount[*p]++; /* if (*p < 0) BOOM! */
// charcount[(unsigned char)*p]++;
p++;
}
On vaut la peine de noter que le caractère est un type distinct de la Char et de la Char. P>