我最近看到了许多像
这样的代码示例1 << 20
虽然我知道这个运算符可以在整数上使用但我不确定它是做什么的,我尝试做的每一次谷歌搜索都会返回cout <<
的内容,但整数操作没有任何内容。有人能告诉我这个算子对整数的作用吗?
答案 0 :(得分:11)
<<
是Bit wise left shift operator
C ++ 03 [5.8/2
]
E1的值<&lt; E2是E1(解释为位模式)左移E2位位置;空位是零填充的。如果E1具有无符号类型,则结果的值为E1乘以上升到功率E2的数量2,如果E1的类型为无符号长,则减少模ULONG_MAX + 1,否则为UINT_MAX + 1。 [注意:标题中定义了常量ULONG_MAX和UINT_MAX)。 ]
此外,在表达式E1 << E2
中,如果E1
具有签名类型和负值,则行为未定义。
这意味着-1 << 4
之类的东西会调用UB。
答案 1 :(得分:4)
比特转换:http://en.wikipedia.org/wiki/Bitwise_shift#Bit_shifts
您正在向左移动1 20位,或者......
1&lt;&lt; 20 ==(二进制)1 0000 0000 0000 0000 0000 == 2 ^ 20 == 1048576
答案 2 :(得分:4)
使用&lt;&lt;和&gt;&gt;因为io实际上比他们的“原创”目的更新,有点转移。
1 << 1
表示取二进制1(也就是普通1)并将所有内容沿1向左移动,得到二进制10或2.它将它加倍。 1 << 2
变为4,1 << 3
变为8,依此类推。 (从一个比一个更复杂的数字开始仍然有效,再次你只需将一切都移到左边。)这种工作被一些人称为“bit twiddling”。它可以节省某些算术运算的时间。