-
Char vs unsigned char
Salut à tous,
Cela fait de nombreuses années que je code en C++, mais comme beaucoup de personnes qui utilisent des outils pour travailler et même si l’on en connaît l’utilité ou le moment de s’en servir, on ne connaît pas le réel fonctionnement de celui-ci.
J’essaye depuis peu de remédier a cela, en reprenant la base de C++ et de comprendre le fonctionnement de celui-ci.
La question que je me pose, c’est, quel est l’intéret du unsigned char par rapport au signes char.
Je peux le comprendre pour un int d’avoir une valeur négative vers une valeur positive, mais je n’en comprend pas le sens dans un char.
Char est donc une valeur comprise entre -128 à 127 alors que le unsigned char est de 0 à 255.
Mais encore ???
Pourriez-vous m’éclairer ?
Je comprend vite, mais il faut m’expliquer longtemps :mrgreen:
Merci.
-
Il me semble que la taille du char d’après la norme indique juste qu'il puisse faire 1 byte au minimum , mais rien n’empêche de faire plus :)
Citation:
Envoyé par
kaygee
Mais encore ???
Mais encore c'est tout , oui le unsigned char est assez rare d'utilisation pour ma part , j'utilise un unsigned char quand je représente une image matriciel mais je me souviens pas de l'utiliser plus que ça.
(et puis sur un processeur 8/ ou 16 bits si on veut garder un compatibilité le char est un bon moyen).
-
Merci pour ta réponse, en fait j'ai eu l'occasion de l'uyiliser a plusieur reprise sur des fonction d'encryption decryption qui m'avait ete fournie.
C est un peu le but de ma demarche, pourquou un unsigned.
-
Alors, sizeof(char) == 1 byte, toujours!
Le nombre de bits d'un char est donné par `CHAR_BIT`. Depuis relativement peu de temps c'est garanti >= 8.
Corollaire, la notion de byte est dépendante de la machine/OS courante, et c'est différent d'un octet donc.
Ensuite, char est garanti de donner des valeurs entre 0 et 127. signed char entre -128 et +127, unsigned char entre 0 et 255. Ce sont trois types différents.
Après il y a d'autres propriétés. modulos et décalages sont spécifiés sur les non-signés uniquement -- propriétés pouvant s'avérer importantes quand on manipule des données binaires.
Les overflow sont également spécifiés sur les non-signés -- ce qui a pour effet de bord qu'un compilo a plus de latitude pour optimiser i++ sur un signé que sur un non-signé.
-
De mémoire, sur les systèmes de fichiers FAT, l'attribut des fichiers est stocké dans un char non signé car il est utilisé comme un masque de bits : 1 bit pour les fichiers cachés, 1 bit pour le type dossier etc. Dans ce cas, utiliser une valeur signée n'a pas de sens.
-
Il y a une autre subtilité, la norme exige que char soit un type dont la représentation mémoire et l'alignement soit le même que signed char ou unsigned char, tout en étant un type distinct des deux.
Fonctionnellement, char est le type à utiliser pour représenter un atome de texte, un "caractère", tandis que signed char et unsigned char sont deux types numériques.