为什么我的变量在应用移位运算符后没有改变?
int main()
{
int i=3;
(i << 1);
cout << i; //Prints 3
}
由于左移一位,我预计会得到 6。为什么它不起作用?
int main()
{
int i=3;
(i << 1);
cout << i; //Prints 3
}
I expected to get 6 because of shifting left one bit. Why does it not work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
因为移位运算符返回一个值。
您想要这样:
移位运算符不会“就地”移位。您可能正在考虑其他版本。如果他们这样做,就像许多其他 C++ 二元运算符一样,那么我们就会发生非常糟糕的事情。
Because the bit shift operators return a value.
You want this:
The shift operators don't shift "in place". You might be thinking of the other version. If they did, like a lot of other C++ binary operators, then we'd have very bad things happen.
您应该使用
<<=
否则该值就会丢失。You should use
<<=
or the value is just lost.您没有将表达式
(i << 1);
的值分配回i
。尝试:
或者(相同):
You're not assigning the value of the expression
(i << 1);
back toi
.Try:
Or (same):
您需要将
i
分配给移位后的值。或者,您可以使用 <<= 作为赋值运算符:
You need to assign
i
to the shifted value.Alternatively, you can use <<= as an assignment operator:
因为你没有把答案分配给i。
Because you didn't assign the answer back to i.
您需要使用
i<<=1
将值重新分配回i
(使用“左移和赋值运算符”)You need to reassign the value back to
i
withi<<=1
(using "left shift and assign operator")原因:
我<< 1
产生一个中间值,该中间值不会保存回变量i
。为了您的意图,您可以使用:
Reason:
i << 1
produce an intermediate value which is not saved back to variablei
.For your intention, you can use: