web-dev-qa-db-fra.com

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?

51
Anton

Déclarez votre ch comme

unsigned char ch = 212 ;

Et votre printf fonctionnera.

35
user1944441

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);
10
Eric Postpischil

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.

1
Shohanur Rahaman

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.

1
banarun

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);
1
Makketronix