Donc, je sais que la différence entre un int signé et non signé est un peu, qui est utilisé pour indiquer si le nombre si positif ou négatif, mais comment cela s’applique à un char ? Comment un personnage être positif ou négatif ?
Réponses
Trop de publicités?Il n'y a pas consacré le caractère "type" en langage C. char
est un type entier, même (à cet égard) int
, short
et les autres types d'entiers. char
se trouve être le plus petit de type entier. Donc, comme tout autre type entier, il peut être signé ou non signé.
Il est vrai que (comme son nom l'indique) char
est principalement destiné à être utilisé pour représenter les caractères. Mais les caractères en C sont représentés par leur entier, les "codes", donc il n'y a rien d'anormal dans le fait qu'un type entier, char
est utilisé pour servir à cette fin.
La seule différence générale entre char
et les autres types d'entiers, c'est que la plaine char
n'est généralement pas synonyme d' signed char
, alors que pour les autres types d'entiers l' signed
modificateur est facultatif/implicite.
Je l'ai un peu en désaccord avec ce qui précède. La unsigned char signifie simplement: Utiliser le bit le plus significatif au lieu de le considérer comme un indicateur de bit pour le signe +/- lors de l'exécution d'opérations arithmétiques.
Il permet d'importance si vous utilisez char comme un nombre, par exemple:
typedef char BYTE1;
typedef unsigned char BYTE2;
BYTE1 a;
BYTE2 b;
Pour la variable de l' un, à seulement 7 bits sont disponibles et sa gamme de (-127 à 127) = (+/-)2^7 -1. Pour la variable b tous les 8 bits sont disponibles et la gamme de 0 à 255 (2^8 -1).
Si vous utilisez char en tant que personnage, "unsigned" est complètement ignoré par le compilateur comme les commentaires sont supprimés à partir de votre programme.
Il y a trois type char types: (plain) char
, signed char
et unsigned char
. Tout char est généralement un entier 8 bits* et, dans ce sens, un signed
et unsigned char
ont un sens utile (généralement équivalent à uint8_t
et int8_t
). Lorsqu'il est utilisé comme un caractère dans le sens d'un texte, utiliser un char
(également appelée plaine de char). C'est typiquement une signed char
, mais peut être mis en œuvre soit par le compilateur.
* Techniquement, un char peut être de toute taille, tant que sizeof(char)
est 1, mais il est généralement un entier 8 bits.
La représentation est la même, le sens est différent. par exemple, 0xFF, il représenté sous la forme « FF ». Lorsqu’elle est considérée comme « char », c’est le nombre négatif -1 ; mais c’est 255 comme non signés. Quand il s’agit de bits de décalage, il y a une grande différence puisque le bit de signe n’est pas déplacé. par exemple, si vous déplacer 255 1 droite de type bit, il obtiendra 127 ; Shifting « -1 » droite sera sans effet.
Un "signed char" est une valeur signée, qui est généralement plus petit que, et il est garanti de ne pas être plus grand que, un "court". Un "unsigned char" est une valeur non signée, qui est généralement plus petit que, et il est garanti de ne pas être plus grand que, un "court". Un type 'char', sans signés ou non signés qualificatif peut se comporter comme un signed ou unsigned char; c'est en général de mise en œuvre défini, mais il ya un couple de cas où il n'est pas:
- Si, dans la plate-forme cible du jeu de caractères, les caractères requis par la norme C serait carte à un code plus élevé que le maximum signed char, le char doit être signé.
- Si "char" et "court" sont de la même taille, puis 'char' doit être signé.
Partie de la raison il y a deux dialectes de "C" (ceux où "char" est signé, et ceux où il est non signé), c'est que il y a certaines implémentations où 'char' doivent être signés, et d'autres où il doit être signé.