133 votes

Différence entre char signé / non signé

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 ?

126voto

AndreyT Points 139512

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.

42voto

Simple Fellow Points 817

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.

21voto

DrAl Points 29528

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.

14voto

user2376256 Points 21

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.

11voto

supercat Points 25534

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:

  1. 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é.
  2. 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é.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X