加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 动态 > 正文

使用移位操作代替乘除运算效率更高,真的吗?

发布时间:2021-04-22 09:41:43 所属栏目:动态 来源:互联网
导读:别就是使用 h7 移位操作代替了 127 * h 乘法操作 与前面那段C语言代码相比,唯一的区别就是使用 h7 移位操作代替了 127 * h 乘法操作。在我的机器上,我测试了这两段C语言代码的效率,结果是两者差不多快,有时 127 * h 版本的C语言代码更快! 解析 C语言程序

别就是使用 h<<7 移位操作代替了 127 * h 乘法操作

与前面那段C语言代码相比,唯一的区别就是使用 h<<7 移位操作代替了 127 * h 乘法操作。在我的机器上,我测试了这两段C语言代码的效率,结果是两者差不多快,有时 127 * h 版本的C语言代码更快!

解析

C语言程序中,使用移位操作代替乘除操作更快吗?现在这个问题我们已经有答案了:并不如此。原因在于C语言编译器一般都会优化我们的代码,它知道如何尽可能快地增加目标处理器体系结构的能力,也即尽量生成尽可能快的程序。

因此作为C语言程序员,我们应该做的是明确告诉编译器我们的意图(即到底是 i * 2,还是 i<<1),让它根据上下文决定如何产生更快的指令。

当硬件不支持快速乘除法时,编译器会将乘除法转换为移位和加法/减法的适当组合。因为它知道我们的最终目的,所以有时候显示的写出移位代码,倒不如直接告诉编译器我们的目的,这样才能得到尽可能快的C语言程序。

事实上,有时候简单的移位操作并不等同于乘除法,而且有些乘法并不能通过简单的移位实现,例如:,使用移位操作代替乘除法操作可能会带来预计之外的结果。而且有些移位组合也会让同事难以理解这段C语言代码的真实意图,也不利于协作开发和后期维护。

小结

本节讨论了C语言程序开发中,移位操作与乘除法操作的关系,并讨论了它们之间的效率问题。可以看出,我们并不需要纠结二者之间的取舍。事实上,考虑到代码的易读性和编译器的优化特性,我们应该写出“本意”代码,即:希望实现乘除操作时,就写出乘除代码。希望实现移位操作时,就写出移位代码。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读