代码之家  ›  专栏  ›  技术社区  ›  Chenna V

如何实施轮班操作员?

  •  1
  • Chenna V  · 技术社区  · 15 年前

    我想知道当我做4<<2时,下面到底发生了什么??是否进行了任何乘法运算或如何计算值。如果你有关于轮班操作员实施的参考,请回复我。提前谢谢

    5 回复  |  直到 15 年前
        1
  •  5
  •   Oded    15 年前

    通常这是一条处理器指令(直接在处理器上完成)。

    它只是简单地移动内存中的位:

    int a = 3; // a = 0 0 1 1
    a << 1;    // a = 0 1 1 0 = 6
    a << 1;    // a = 1 1 0 0 = 12
    

    Code

        2
  •  3
  •   Eugene Mayevski 'Callback    15 年前

    在您的特殊情况下,编译器会将其快捷方式设置为常量,但一般情况下,处理器的指令集包含执行位移位操作的特殊操作码(操作码、命令)。

    Here's good explanation

        3
  •  1
  •   Oliver Charlesworth    15 年前

    在硬件方面,每个输出位是通过选择一个输入位来生成的。不需要乘法器,只需要大量的多路复用。

        4
  •  1
  •   supercat    15 年前

    例如,使用(1<

      if (shift_amount & 16)
        longvar >>= 16;
      if (shift_amount & 8)
        longvar >>= 8;
      if (shift_amount & 4)
        longvar >>= 4; /* If processor has optimization for this */
      longvar >>= (shift_amount & 3);
    

        5
  •  0
  •   teukkam    15 年前

    所有处理器可能都有移位指令, here