带有 << 的整数运算
我最近看到了一些代码示例,其中包含类似的内容,
1 << 20
虽然我知道这个运算符可以用于整数,但我不确定它的作用,并且我尝试对其进行的每次谷歌搜索都会返回有关 cout
cout
的内容。 <
但没有关于整数运算的内容。有人能告诉我这个运算符对整数做什么吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
<<
是按位左移运算符C++03 [
5.8/2
]此外,在表达式
E1 << E2
如果E1
具有带符号类型和负值,则行为未定义。这意味着类似
-1 << 4
调用UB。<<
is Bit wise left shift operatorC++03 [
5.8/2
]In addition in the expression
E1 << E2
ifE1
has a signed type and negative value the behaviour is undefined.That means something like
-1 << 4
invokes UB.位移位:http://en.wikipedia.org/wiki/Bitwise_shift#Bit_shifts
向左移动 1 20 位,或者...
1 << 20 ==(二进制)1 0000 0000 0000 0000 0000 == 2^20 == 1048576
Bit shifting: http://en.wikipedia.org/wiki/Bitwise_shift#Bit_shifts
You are shifting 1 20 bits left, or...
1 << 20 == (binary) 1 0000 0000 0000 0000 0000 == 2^20 == 1048576
使用<<和>>因为 io 实际上比它们的“原始”目的(位移)更新。
<代码>1 << 1 表示取二进制 1(也只是普通的 1)并将所有内容沿着 1 向左移动,得到二进制 10 或 2。它将它加倍。 <代码>1 << 2 变为 4,
1 << 3
变为 8,依此类推。 (从比 1 更复杂的数字开始仍然有效,只需将所有内容移至左侧即可。)这种工作被某些人称为“位旋转”。它可以节省某些类型的算术运算的时间。The use of << and >> for io is actually newer than their "original" purpose, bit shifting.
1 << 1
means to take the binary 1 (which is also just plain 1) and move everything along 1 to the left, resulting in a binary 10 or 2. It doubles it.1 << 2
becomes 4,1 << 3
becomes 8, and so on. (Starting with a more complicated number than 1 still works, again you just shift everything over to the left.) This kind of work is called "bit twiddling" by some. It can save time for certain kinds of arithmetical operations.