Valeur maximale de unsigned char
#include <stdio.h>
int main()
{
unsigned char i=0x80;
printf("%d",i<<1);
return 0;
}
Pourquoi ce programme ne fait imprimer 256?
Que je comprends ce, depuis 0x80= 0b10000000, et unsigned char a 8 bits, le " 1 " doit déborder après virage à gauche et la sortie doit être de 0, pas 256.
Ne voulez pas afficher comme une réponse parce que je ne suis pas sûr à 100%, mais n'est-ce pas parce que %d est un nombre entier? Donc, le code derrière les coulisses probablement attribue
Aurait posté la réponse 😉
de sortie est vide lorsque j'utilise le c%.
Eh bien, je suppose que j'étais sur la bonne voie. Désolé %c ne fonctionne pas - je n'ai pas de compilateur à la main pour le vérifier!
Sur la plupart des compilateurs,
i<<1
à un nombre entier de les imprimer, ce qui signifie qu'il s'adapte et ne déborde pas. Essayez de faire printf("%c", i<<1);
?Aurait posté la réponse 😉
de sortie est vide lorsque j'utilise le c%.
Eh bien, je suppose que j'étais sur la bonne voie. Désolé %c ne fonctionne pas - je n'ai pas de compilateur à la main pour le vérifier!
Sur la plupart des compilateurs,
i << n
va produire un nombre entier, quel que soit le type d'origine.OriginalL'auteur Variance | 2010-07-30
Vous devez vous connecter pour publier un commentaire.
C'est un résultat de C entier règles de promotion. Essentiellement, la plupart de n'importe quelle variable dans une expression est "promu", de sorte que des opérations de ce genre, ne pas perdre de précision. Ensuite, c'est passé comme une
int
enprintf
, selon C est la variable d'arguments règles.Si vous voulez ce que vous cherchez, vous auriez à jeter en arrière pour
unsigned char
:Remarque: l'utilisation de
%c
comme spécifié dans Stephen le commentaire ne fonctionnera pas parce que%c
attend un entier.EDIT: Sinon, vous pourriez faire ceci:
ou
(i<<1)
àunsigned char
?N'est-ce pas ce que j'ai fait?
Bizarre, je doit avoir mes œillères allumé.
"à l'aide de %c tel que spécifié dans Stephen le commentaire ne fonctionnera pas parce que c %s'attend à un nombre entier." -->
"%c"
et"%d"
à la fois accepter unint
."%c"
convertit sesint
à ununsigned char
, puis imprime le personnage.Pour l'exhaustivité, il doit être mentionné que
unsigned char
favorisesigned int
ouunsigned int
selon si oui ou non toutes les valeurs deunsigned char
peut être représenté dans unsigned int
, et que le"%c"
spécificateur s'attend à unsigned int
qui est l'un de plusieurs types d'entiers.OriginalL'auteur Billy ONeal
N'oubliez pas le format spécifiquement pour l'impression de pas signé.
printf
commesigned int
, pasunsigned
. Vous jette de l'argument d'un type qui correspond le spécificateur de format.OriginalL'auteur Paul E.