Les réponses de Lindydancer et 6502 d'expliquer pourquoi, sur certaines machines), il arrive à être un 1
qui est en cours d'impression (bien que le comportement de l'opération n'est pas défini). Je suis ajoutant des détails dans le cas où ils ne sont pas évidents.
Je suis en supposant que (comme moi), vous exécutez le programme sur un processeur Intel. GCC génère ces instructions de montage pour l'opération de décalage:
movl $32, %ecx
sall %cl, %eax
Sur le thème de l' sall
et d'autres opérations de décalage, page 624 dans le Jeu d'Instructions du Manuel de Référence dit:
Le 8086 ne masque pas le décalage. Cependant, tous les autres de l'Architecture Intel processeurs
(en commençant avec l'Intel 286) ne masque le décalage de cinq bits, résultant en une
nombre maximal de 31. Ce masque est fait dans tous les modes de fonctionnement (y compris le virtuel 8086
mode) afin de réduire au maximum les temps d'exécution des instructions.
Depuis le bas du 5 de 32 bits sont égaux à zéro, 1 << 32
est équivalent à 1 << 0
, ce qui est 1
.
Expérimenter avec de plus grands nombres, nous prédire que
cout << (a << 32) << " " << (a << 33) << " " << (a << 34) << "\n";
imprimez 1 2 4
, et en effet, c'est ce qui se passe sur ma machine.