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 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