Juste pour développer la réponse de Marc un peu (Marc, ne hésitez pas à inclure dans le vôtre et je vais supprimer cette réponse) cela est précisé dans la section 7.8 de la spécification:
Le opérateurs de décalage prédéfinis sont répertoriés ci-dessous.
décalage à gauche:
- opérateur int < < (int x, int count);
- Opérateur uint < < (uint x, nombre entier);
- long opérateur < < (long x, nombre entier);
- l'opérateur ulong (ulong x, compte int);
L'opérateur < < décale x à gauche d'un nombre de bits calculé comme décrit ci-dessous.
Les bits de poids fort en dehors de la plage du type résultat de x sont ignorés, les bits restants sont décalés vers la gauche et les bits binaires vides de poids faible sont mis à zéro.
Maj droite:
- opérateur int >> (int count x, int);
- Opérateur uint >> (uint x, nombre entier);
- long opérateur >> (long x, nombre entier);
- opérateur ulong >> (ulong x, nombre entier);
L'opérateur >> décale x à droite d'un nombre de bits calculé comme décrit ci-dessous. Lorsque x est de type int ou long, les bits de poids faible de x sont rejetés, les bits restants sont décalés vers la droite et les positions de bits vides de poids fort sont mises à zéro si x est non négatif et sont définies à un si x est négatif. Lorsque x est de type uint ou ulong, les bits de poids faible de x sont rejetés, les bits restants sont décalés vers la droite et les positions de bits vides de poids fort sont mises à zéro.
Pour les opérateurs prédéfinis, le nombre de bits de décalage est calculé comme suit:
Lorsque le type de x est un entier ou uint, le nombre de changement de vitesse est donnée par l'ordre faible cinq bits de comptage. En d'autres termes, le compte de décalage est calculé à partir du compte & 0x1F.
Lorsque le type de x est long ou ulong, le compte de décalage est donné par les six bits de poids faible. En d'autres termes, le compte de décalage est calculé à partir du compte & 0x3F.
Si le compte de décalage résultant est zéro, les opérateurs de décalage retournent simplement la valeur de x.
Salut, puis-je vous demander de l'expliquer plus? Dans le premier pourquoi j'ai 0x200000000 et dans le second pourquoi j'ai 16000? merci beaucoup –
C'est comme dire "pourquoi est 1 * 50000 différent de 1000 * 8" - parce que vous faites des choses très différentes. Le premier est 2^33 ("pouvoir de"), le second est 1000 * 16. –
ok je comprends la différence entre 2^33 et 1000 * 16 je veux savoir pourquoi 2^32 –