<<<<<<

时间:2010-11-02 02:53:18

标签: c++ operators

我最近看到了许多像

这样的代码示例
1 << 20 

虽然我知道这个运算符可以在整数上使用但我不确定它是做什么的,我尝试做的每一次谷歌搜索都会返回cout <<的内容,但整数操作没有任何内容。有人能告诉我这个算子对整数的作用吗?

3 个答案:

答案 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”。它可以节省某些算术运算的时间。

相关问题