代码之家  ›  专栏  ›  技术社区  ›  njvb

整数运算<<

  •  1
  • njvb  · 技术社区  · 14 年前

    我最近看到了一些代码示例,比如

    1 << 20 
    

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

    3 回复  |  直到 14 年前
        1
  •  11
  •   Prasoon Saurav    14 年前

    << Bit wise left shift operator

    C++ 03 5.8/2 ]

    e1<<e2的值为e1(解释为位模式),左移e2位位置;空出的位为零。如果e1有无符号类型,则结果的值为e1乘以2的幂e2,如果e1有无符号长型,则减小模ulong_max+1,否则为uint_max+1。[注:常量ulong_maxand uint_max在头中定义)。]

    另外在表达式中 E1 << E2 如果 E1 具有有符号类型和负值,行为未定义。

    这意味着 -1 << 4 调用ub。

        2
  •  4
  •   wkl    14 年前

    位移动: http://en.wikipedia.org/wiki/Bitwise_shift#Bit_shifts

    您将左移1 20位,或者…

    1<<20==(二进制)1 0000 0000 0000 0000 0000 0000==2^20==1048576

        3
  •  4
  •   Kate Gregory    14 年前

    IO使用<<>>,实际上比其“原始”用途(位移位)更新。

    1 << 1 意思是取二进制1(也就是普通的1),然后将所有的东西都沿1向左移动,得到二进制10或2。它是它的两倍。 1 << 2 变成4岁, 1 << 3 变为8,依此类推。(从一个比1还复杂的数字开始,你又把所有的东西都移到左边)这种工作被一些人称为“比特旋转”。它可以为某些算术运算节省时间。