计算机中的指令执行时间是:
加减法运算 -----1ns
乘法运算 ------5~6ns
除法运算 -------50ns
因此在编写程序时,应该使用一些操作代替乘除法的操作。
1、表达式优化(替换程序中的乘除法)
如 a * 8 可以替换为 a << 3
而a * 13 可以替换为 a << 3 + a << 2 + a
但是除法运算却不可以。只有除法操作中的除数正好是一个2的次幂时才能替换除法运算如a / 8可以替换为a >> 3.但是a / 13则无能为力。
2、表达式优化(常量折叠)
在进行运算的过程中,通常需要进行连续的四则运算。如下所示:
int a = 10;
a = a + 2 * 17 + 6;
这个程序段实际上等同于:
int a;
a = a + 40;
写成这样程序实际上只需要进行一次计算,计算a + 40的值。
3、表达式优化(存储问题)
语句 x = x + 1;
该语句在编译时编译器会认为赋值号两边的操作数不是同一个操作数,而是两个。尽管用户知道这是一个操作数。这时该语句分为三步,分别是:寻找存储左边操作数x的内存单元地址;寻找存储右边操作数x的内存单元地址;计算x+1的值并存储在变量x中。
而语句 x += 1;
编译器会认为赋值号两边的操作数是同一个。所以只需要两步。