c语言中左移和乘法谁高级,C程序员说使用移位运算代替乘法和除法更有效,是真的吗?...
在C语言程序开发中,某些移位操作似乎达到与乘法和除法运算相同的效果. 例如,4 >> 1等于2,向右移一位等于2除. 类似地,2 << 1等于4,向左移一位等于2.
因此,一些教科书建议使用移位运算而不是乘法和除法运算,因为它们可以提高最终C语言程序的效率,是真的吗?
是真的吗?
获得答案的最简单,最直接的方法是进行实验. 以下是两个有关哈希算法的C语言程序,请参见:
读者应关注h = 127 * h +(无符号字符)* s;一条线. 这时,C语言代码使用乘法. 以下是另一种C语言代码,请参见:
唯一的区别是使用h << 7移位运算而不是127 * h乘法运算
与以前的C语言代码相比,唯一的区别是使用h << 7移位运算而不是127 * h乘法运算. 在我的机器上,我测试了这两个C语言代码的效率,结果是两者几乎都快了,有时候127 * h版本的C语言代码更快了!
在C语言程序中,使用移位运算代替乘法和除法运算更快吗?现在我们对这个问题有了答案: 不是这样. 原因是C语言编译器通常会优化我们的代码. 它知道如何尽快增加目标处理器体系结构的容量,即生成最快的程序.
因此c语言移位运算,作为C语言程序员,我们应该做的是告诉编译器我们的意图(即,它是i * 2还是i << 1),并让其决定如何根据上下文生成更快的指令.
明确告诉编译器我们的意图
当硬件不支持快速乘法和除法时,编译器会将乘法和除法转换为移位和加法/减法的适当组合. 因为它了解我们的最终目的,所以有时最好告诉编译器我们的目的是明确地编写移位代码,以便获得最快的C语言程序.
实际上,有时简单的移位运算不等于乘法和除法,并且某些乘法不能通过简单的移位来实现,例如:
因此,使用移位运算代替乘法和除法运算可能会带来意外的结果. 而且某些换档组合将使同事很难理解此C语言代码的真实意图,这也不利于协作开发和后期维护.
本节讨论在C语言程序开发中移位运算与乘法和除法运算之间的关系,并讨论它们之间的效率问题. 可以看出,我们不需要在两者之间进行斗争. 实际上,考虑到代码的易读性和编译器的优化特性,我们应该编写“有意”代码,即,当我们要执行乘法和除法运算时,编写乘法和除法代码. 要执行移位操作时,请编写移位代码.
喜欢就走
如果您想很好地学习C ++,最好加入一个组织,以便每个人都可以更轻松地学习,并且可以一起交流和共享信息c语言移位运算,并为您推荐一个学习型组织: Da Niu Xiao Bai C ++组织可以单击直接可访问的编程字上
欢迎加入有趣的编程
礼品簿如下: 单击➥获取
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-270921-1.html
c语言中左移和乘法谁高级,C程序员说使用移位运算代替乘法和除法更有效,是真的吗?...相关推荐
- c语言左移15位,关于c语言中左移右移运算符的问题
参照<c与指针>,在c语言中左移时,不论算术左移还是逻辑左移效果都是相同的.而且对于有符号和无符号类型执行相同的操作,即按照二进制位向左左移N位.例如: 1 clude 2 intmain ...
- c语言中左移右移有什么作用,C语言中左移和右移运算符详细介绍
搜索热词 C语言中左移和右移运算符详细介绍 左移运算符(< 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出 ...
- 高级 Java 程序员都在学什么?
我曾在某乎的一条回答下看到这样一条评论: 确实,Netty 大家肯定都会,不会的绝对是初级或者XX 上面的说有失偏颇,学习技术没必要上升到人身攻击,更重要的是如何学会技术,面好的大厂,拿到高的薪资. ...
- Verilog学习之移位运算与乘法设计
文章目录 前言 一.题目描述 二.实现思路 1.理解移位运算与状态机 1)移位运算 1>算数移位 2>逻辑移位 2)状态机 1>什么是状态机 2>状态机的类型 Moore 型状 ...
- 高级PHP程序员应该掌握哪些技术?
高级PHP程序员应该具备哪些技能? 我觉得高级PHP程序员至少应该具备如下能力: 操作系统 熟悉操作系统的作用,以及其如何管理软硬件的熟悉进程和线程,以及相互之间的区别和联系熟悉Linux中进程线程切 ...
- 如何才能进阶高级Java程序员?
身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识.进阶高级Java程序员要怎么做,不如跟着千锋重 ...
- 想成为高级PHP程序员,需要掌握哪些技术呢
转自:微点阅读 https://www.weidianyuedu.com/content/1217215138119.html 高级PHP程序员应该具备哪些技能? 我觉得高级PHP程序员至少应该具备 ...
- 高级php程序员,php高级程序员该学什么
高级PHP程序员 重点:除了基本的LNMP程序,还能够在某个方向或领域有深入学习.(纵深维度发展) (推荐学习:PHP视频教程) 目标:除了能够完成基本的PHP业务开发,还能够解决大部分深入复杂的技术 ...
- 中国都有哪些顶级优秀的程序员?
中国都有哪些顶级优秀的程序员? 91.com移动互联网第一平台时间:2017-05-27[网站合作]快速评论关注91 相关搜索: 科学家第二次警告 小海绵正面照曝光 红通张靖川投案 3名男子香港遇袭 ...
最新文章
- 期末Java面向对象程序设计复习稳过不挂指南(更新中)
- static 变量初始化顺序的问题和解决方案
- 第二十六讲:基础一开放封闭原则
- php阳历转阴历(农历),阴历转阳历的方法
- 宇宙无敌大招呼 (5 分)
- 安卓QQ闪照解密秒存助手
- flash builder 序列号
- SSD目标检测算法生成8732个先验框
- TB6612驱动电机
- R语言进行系统聚类分析并作图(数据来源国家统计局)
- Windows设置开机自启动的三种方式
- 适合程序员的英文名字
- 浅析信号与系统2(离散时间复指数序列的周期性质)
- php对接微博热搜,基于PHP爬虫的微博热搜实时监控平台
- ipv6如何测试服务器已经是ipv6协议,怎么测试域名是否支持ipv6
- java-数组-输出二十六个字母
- 2023最新素材解析网站源码搭建和原理,附带PHP小例子。
- CCF CSP 201609-2 火车购票 C++实现 100分
- 翻斗式雨量计的组成与工作原理
- java I/O流