Pourquoi ma variable n’a-t-elle pas changé après l’application d’un opérateur de décalage de bits?

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;