39 votes

Pourquoi cela fait-il une différence si le décalage à gauche et à droite sont utilisés ensemble dans une expression ou non ?

J'ai le code suivant :

unsigned char x = 255;
printf("%x\n", x); // ff

unsigned char tmp = x << 7;
unsigned char y = tmp >> 7;
printf("%x\n", y); // 1

unsigned char z = (x << 7) >> 7;
printf("%x\n", z); // ff

Je m'attendais y z soient les mêmes. Mais ils diffèrent selon qu'une variable intermédiaire est utilisée ou non. Il serait intéressant de savoir pourquoi c'est le cas.

7voto

ivangreek Points 86

L'opérateur de quart n'est pas défini pour les types char. La valeur de n'importe quel opérande char est convertie en int et le résultat de l'expression est converti du type char. Ainsi, lorsque vous mettez les opérateurs de décalage gauche et droit dans la même expression, le calcul sera effectué en tant que type int (sans perdre de bit), et le résultat sera converti en char.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X