大话C语言——优化结构控制(一)

一个好的控制结构对程序执行的影响是巨大的,因此,对控制结构优化非常重要。

今天我们来谈谈优化结构控制:

一 表达式优化———使用替换程序中的乘除法

表达式优化是最基本的优化,使用简洁高效的表达式可以大幅度的提高程序的效率。优化是一个广泛而深入的话题,在程序执行过程中,加减法是计算机最喜欢的操作。其执行时间只占用1个时钟周期,是最快速的操作。位运算与移位计算执行速度与减法相近,乘法时间要长,大概在5~6个周期完成。不用说都知道除法最慢,大约需要50个时钟周期。因此,我们需要用一些操作代替乘除法。

1.移位操作代替乘法:

这显然可以提高程序的运行效率。
举例说明:
#include <stdio.h>

int main()
{
    int a=16;
    printf("a divided by 4:%d\n",a>>2);
    printf("a multiplied by 5:%d\n",(a<<2)+a);
    return 0;
}
输入结果:
a divided by 4:4
a multiplied by 5:80

移位操作是一个很好的选择,数据左移移位相当于乘以2,右移移位相当于除以2。


总结:所有乘法操作都可以用左移运算来替换,例如:a*8可以替换为a<<3,而a*13可以替换为(a<<3)+(a<<2)+a,但是除法操作不可以。只有除法操作的除数正好是一个2的n次幂才能用右移操作来替换除法,例如:a/8可以替换成a>>3,但是a/13却无能为力了。

二 结构优化——常量折叠

在进行计算中,通常要进行连续的四则运算,例如:
int a=10;
a=a+2*17+6;

这个程序实际上相当于

int a;
a=a+40;
如果写成第二种形式,程序只用执行一次。
如果写成第一种,程序要进行1次乘法2次加法。
谁速度快就一目了然了。这种将程序中的常量人为的计算的方法叫做常量折叠
对于现代的编译器来说,常量折叠已经是一种常规的常量折叠方式。也就是说,即使研发人员没有使用常量折叠,编译器会自己执行。当然有些情况不使用会更好,便于理解与维护。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值