int main() { int i=3; (i << 1); cout << i; //Prints 3 }
Je m’attendais à obtenir 6 en raison d’un décalage gauche. Pourquoi ça ne marche pas?
Parce que les opérateurs de décalage de bits renvoient une valeur.
Tu veux ça:
#include int main() { int i = 3; i = i << 1; std::cout << i; }
Les opérateurs de quart ne décalent pas "en place". Vous pensez peut-être à l'autre version. S'ils le faisaient, comme beaucoup d'autres opérateurs binarys C ++, nous aurions de très mauvaises choses.
i <<= 1; int a = 3; int b = 2; a + b; // value thrown away a << b; // same as above
Vous devez utiliser <<=
ou la valeur est simplement perdue.
Vous devez affecter i
à la valeur décalée.
int main() { int i=3; i <<= 1; cout << i; //Prints 3 }
Vous pouvez également utiliser << = en tant qu'opérateur d'affectation:
i <<= 1;
Parce que vous n’avez pas atsortingbué la réponse à i.
i = i << 1;
Vous n’atsortingbuez pas la valeur de l’expression (i << 1);
retour à i
.
Essayer:
i = i << 1;
Ou (même):
i <<= 1;
Vous devez réaffecter la valeur à i
avec i<<=1
(en utilisant "décalage à gauche et atsortingbuer un opérateur")
Raison: i << 1
produit une valeur intermédiaire qui n'est pas sauvegardée dans la variable i
.
// i is initially in memory int i=3; // load i into register and perform shift operation, // but the value in memory is NOT changed (i << 1); // 1. load i into register and perform shift operation // 2. write back to memory so now i has the new value i = i << 1;
Pour votre intention, vous pouvez utiliser:
// equal to i = i << 1 i <<= 1;