int main()
{
int i=3;
(i << 1);
cout << i; //Prints 3
}
由于左移一位,我预计会得到6分。为什么不起作用?
答案 0 :(得分:19)
因为位移运算符返回一个值。
你想要这个:
#include <iostream>
int main()
{
int i = 3;
i = i << 1;
std::cout << i;
}
班次操作员不会“就地”转移。你可能会想到另一个版本。如果他们这样做,就像许多其他C ++二元运算符一样,那么我们就会发生非常糟糕的事情。
i <<= 1;
int a = 3;
int b = 2;
a + b; // value thrown away
a << b; // same as above
答案 1 :(得分:10)
你应该使用<<=
,否则价值就会丢失。
答案 2 :(得分:4)
您需要将i
分配给移位的值。
int main()
{
int i=3;
i <<= 1;
cout << i; //Prints 3
}
或者,您可以使用&lt;&lt; =作为赋值运算符:
i <<= 1;
答案 3 :(得分:3)
因为您没有将答案分配回i。
i = i << 1;
答案 4 :(得分:3)
您没有将表达式(i << 1);
的值分配回i
。
尝试:
i = i << 1;
或(同):
i <<= 1;
答案 5 :(得分:2)
您需要使用i
将值重新分配回i<<=1
(使用“左移和分配运算符”)
答案 6 :(得分:2)
<强>原因:强>
i << 1
生成一个中间值,该值不会保存回变量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;
出于您的意图,您可以使用:
// equal to i = i << 1
i <<= 1;