《编写高质量代码:改善c程序代码的125个建议》——第2章 保持严谨的程序设计,一切从表达式开始做起 建议12:尽量减少使用除法运算与求模运算

简介:

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章 ,建议12,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第2章 保持严谨的程序设计,一切从表达式开始做起

C语言的表达式遵循一般代数规则,由常量、变量、函数和运算符构成。相对于其他计算机语言来说,C语言表达式的功能更强大,语法更灵活,种类也比较繁多。我们可以根据运算符号把它们简单地划分为算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式和逗号表达式。

建议12:尽量减少使用除法运算与求模运算

对计算机来说,除法与求模是整数算术运算中最复杂的运算。相对其他运算(如加法与减法)来说,这两种算法的执行速度非常慢。例如,ARM硬件上不支持除法指令,编译器调用C库函数来实现除法运算。直接利用C库函数中的标准整数除法程序要花费20~100个周期,消耗较多资源。
在非嵌入式领域,因为CPU运算速度快、存储器容量大,所以执行除法运算和求模运算消耗的这些资源对计算机来说不算什么。但是在嵌入式领域,消耗大量资源带来的影响不言而喻。因此,从理论上讲,我们应该在程序表达式中尽量减少对除法运算与求模运算的使用,尽量使用其他方法来代替除法与求模运算。例如,对于下面的示例代码:

if (x/y>z) 
{
    // ...
}

我们可以将其修改成如下形式:

if (((y>0)&&(x>y*z))||((y<0)&&(x<y*z))) 
{
    // ...
}
这```  
样就简单地避免了一些除法运算。同时,也可以在表达式中通过合并除法的方式来减少除法运算,下面通过示例来讲解。对于如下代码:

double x=a/b/c;
double y=a/b+c/b;

根据数学结合原则,上面的代码可以通过合并的方式减少代码中的除法运算,修改后的代码如下:

double x=a/(b*c);
double y=(a+c)/b;

同样,对于求模运算,也可以采用相应的方法来代替,如下面的示例代码:

a=a%8;

// 可以修改为:

a=a&7;

对于下面的表达式:

x=(x+y)%z;

可以通过如下方式来避免使用模操作符:

x+=y;
while(x>=z)
{

x-=z;

}

通过上面的阐述,相信大家对如何减少使用除法与模运算有了初步了解。下面将详细讨论如何优化除法运算与求模运算。
相关文章

热门文章

最新文章

下一篇
开通oss服务