按位移位的执行时间

时间:2016-07-19 17:19:14

标签: c++ bit-shift execution-time

我的问题是关于在C ++中按位移位整数变量。 将整数移位n(i <&lt; n)的执行时间是否等于将该整数n次移位1(i <1)?

我不会使用循环移动n次。假设n = 8.例如,我想比较以下函数的执行时间:

void f1(int i) {
    i <<= 8;
}

void f2(int i) {
    i <<= 1;
    i <<= 1;
    i <<= 1;
    i <<= 1;
    i <<= 1;
    i <<= 1;
    i <<= 1;
    i <<= 1;
}

换句话说,如果(i <&lt; 8)和(i&lt;&lt; 1)花费相同的时间执行?

1 个答案:

答案 0 :(得分:1)

编辑: <<=别名按位左移是在大多数直接转换为单机器代码指令的CPU上。在x86 CPU系列中,由于历史原因,两种移位变量都可用,要么专门移位一个,要么通用立即#n(或者甚至是在其他寄存器cl中按数字移动的完全动态移位)。但是,例如在类似RISC的ARM CPU上,只有n次移位,所以即使<<=1被转换为同一条指令,只有<<=8,只有不同的参数(并且执行速度是恒定的)。

没有。在大多数现代CPU中,shift的两种变体(按1或#n)都需要相同的时间来执行。

在历史悠久的CPU中,当转换为#n可用时,它可能比按1转换慢一点(如果转换为1指令也可用),但通常比召唤1次换班次。

嗯,这只是&#34; IIRC&#34;所以我去了谷歌(source):80386已经有相同的时间了,但从80286的细节来看它很棘手......对于某些n来说,将它写成几个移位可能会更快。所以..这个问题就像〜迟了30年。