Comment imprimer un caractère non signé en C?
J'essaie d'imprimer le caractère comme valeur positive:
char ch = 212;
printf("%u", ch);
mais je reçois:
4294967252
Comment je peux obtenir 212
dans la sortie?
Déclarez votre ch
comme
unsigned char ch = 212 ;
Et votre printf fonctionnera.
Il y a deux bugs dans ce code. Premièrement, dans la plupart des implémentations C avec char
signé, il y a un dépassement de capacité dans char ch = 212
, Car 212 ne tient pas dans un char
signé 8 bits, et le standard C ne définir le comportement en cas de dépassement d'entier. Il devrait plutôt être:
unsigned char ch = 212;
Deuxièmement, dans printf("%u",ch)
, ch
sera promu en tant que int
dans les implémentations C normales. Cependant, le spécificateur %u
Attend un unsigned int
, Et le standard C ne définit pas le comportement lorsque le type incorrect est transmis. Il devrait plutôt être:
printf("%u", (unsigned) ch);
Parce que char
est par défaut signed
déclaré, cela signifie que la plage de la variable est
-127 à +127>
votre valeur est débordée. Pour obtenir la valeur souhaitée, vous devez déclarer le modificateur unsigned
. La plage du modificateur (unsigned
) est la suivante:
0 to 255
pour obtenir la plage de tout type de données, suivez le processus 2^bit
, exemple char
est une longueur de 8 bits pour obtenir sa plage juste 2 ^(power) 8
.
La plage de caractères est comprise entre 127 et -128. Si vous affectez 212, ch stocke -44 (212-128-128) et non 212.Si vous essayez d'imprimer un nombre négatif avec un signe non signé, vous obtenez (valeur MAX de unsigned int) -abs (nombre) = qui dans ce cas est 4294967252
Donc, si vous voulez stocker 212 tel qu’il est dans ch, la seule chose que vous pouvez faire est de déclarer ch comme
unsigned char ch;
maintenant, la plage de ch va de 0 à 255.
Si vous ne pouvez pas modifier la déclaration pour quelque raison que ce soit, vous pouvez:
char ch = 212;
printf("%d", (unsigned char) ch);