加减法操作是计算机最喜欢的操作。其执行时间只占用1个时钟周期,是最快速的操作。 位运算与移位操作的执行速度和加减法接近。
乘法的执行时间要长一些,大概在5至6个时钟周期内完成。
除法的执行速度最慢,大约需要50个时钟周期才能完成。
由于移位指令的执行速度和加减法差不多,因此替换之后的程序执行速度也会快很多。对于乘法来讲,所有的乘法操作均可以由左移运算来替换。例如,a*8可以替换为a<<3,而a*13可以替换为(a<<3)+(a<<2)+a。但是除法操作却不可以。只有除法操作中的除数正好是一个2的n次幂时才能使用右移操作替换除法运算,例如a/8可以替换为a>>3,但是a/13则无能为力。
源代码:
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int a = 12;
6 printf("%d / 4 = %d\n", a, a>>2);
7 printf("%d * 5 = %d\n", a, (a<<2) + a);
8 return 0;
9 }