移位运营商如何实施?

时间:2010-09-29 16:19:20

标签: bit-shift

我想知道当我做4<< 2时,究竟发生了什么?是否进行了任何乘法或如何计算值。如果您参考移位运营商的实施,请回复我。提前致谢

5 个答案:

答案 0 :(得分:5)

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

它只是移位内存中的位:

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

如果您正在寻找有关处理器如何在极低水平下工作的见解,Charles Petzold的Code是一本很棒的书。

答案 1 :(得分:3)

在您的特定情况下,编译器会将其缩写为常量,但通常,指令集处理器包括执行位移操作的特殊操作码(操作代码,命令)。

Here's good explanation这是如何运作的。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

值得注意的是,某些处理器的指令可以在固定的时间内移位任何数量,有些处理器的指令可以移动可变数量,但需要花费不同的时间来执行此操作(因此需要移动一些内容) 31位可能需要一段时间),而其他的仅限于一次移位一位的指令。虽然人们通常不应该担心这种繁琐的实现细节,但是在实现共同结果的各种方式之间可能会有一些巨大的性能差异。

例如,使用(1&lt;

  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);

如果存在快速移位的指令,则可能会产生相反的效果,但在某些8位计算机上可能会出现巨大的加速(6倍或更高)。

答案 4 :(得分:0)

所有处理器可能都有移位指令,here是汇编语言对应的一些示例。