在应用了位移运算符后,为什么我的变量没有改变?

era*_*ros 7 c++ bitwise-operators

int main()
{
    int i=3;
    (i << 1);
    cout << i; //Prints 3
}
Run Code Online (Sandbox Code Playgroud)

由于左移一位,我预计会得到6分.为什么不起作用?

Mik*_*ley 19

因为位移运算符返回一个值.

你要这个:

#include <iostream>

int main()
{
     int i = 3;
     i = i << 1;
     std::cout << i;
}
Run Code Online (Sandbox Code Playgroud)

轮班操作员不会"就地"转移.你可能会想到另一个版本.如果他们这样做,就像许多其他C++二元运算符一样,那么我们就会发生非常糟糕的事情.

i <<= 1; 

int a = 3;
int b = 2;
a + b;    // value thrown away
a << b;   // same as above
Run Code Online (Sandbox Code Playgroud)


Jac*_*ack 10

你应该使用<<=或者价值刚刚丢失.