博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《编写高质量代码:改善c程序代码的125个建议》——第2章 保持严谨的程序设计,一切从表达式开始做起 建议12:尽量减少使用除法运算与求模运算...
阅读量:7251 次
发布时间:2019-06-29

本文共 907 字,大约阅读时间需要 3 分钟。

本节书摘来自华章计算机《编写高质量代码:改善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

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;

}

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

转载地址:http://ttebm.baihongyu.com/

你可能感兴趣的文章
多进程 (一) — 像线程一样管理进程
查看>>
node+vue报错合辑
查看>>
Date——js 获取当前日期到之后一个月30天的日期区间
查看>>
RT-SA-2019-003 Cisco RV320 Unauthenticated Configuration Export
查看>>
Java线程练习
查看>>
Algs4-1.5.22Erods-renyi模型的倍率实验
查看>>
计算机硬件的组成、python的开发层面及语法介绍
查看>>
python面试知识点
查看>>
栅格布局
查看>>
Zimber 8.8.12卸载后重新安装报错解决办法
查看>>
Git 自救指南
查看>>
spring boot配置项目访问路径,配置拦截器,配置静态虚拟路径
查看>>
linux运维笔记
查看>>
Lake Counting (DFS)
查看>>
信息安全影响因素
查看>>
org.apache.poi 读excel空列跳过的问题
查看>>
hadoop安装
查看>>
作业-闰年流程图
查看>>
delegate事件委托
查看>>
Linux Process VS Thread VS LWP
查看>>