A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 啷个里个郞 于 2012-5-11 16:54 编辑

为什么2乘以8用2<<3运算效率最高?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

7 个回复

正序浏览
二进制运算原理在中间少了很多运算过程。
普通运算中间还有很多复杂的处理过程。
所以2<<3速度比2*8快。

点评

谢谢  发表于 2012-5-11 22:51
回复 使用道具 举报
2<<3属于移位运算,该运算直接使用二进制运算原理,比普通运算2*8速度更快。

点评

谢谢  发表于 2012-5-11 22:50
回复 使用道具 举报
因为在内存中数据都是以二进制的方式保存的
十进制的数据左移一位相当于将其乘以10,而二进制的数据左移一位相当于将其乘以2

点评

谢谢  发表于 2012-5-11 22:50
回复 使用道具 举报
这里涉及CPU运算器的实现原理。CPU做因为移位运算比作乘法运算效率高,而对于cpu做乘法运算,实现的原理是移位运算+加法运算实现的(也有CPU是直接乘法器,效率不高)。2乘以8运算要进行移位和加法运算,而2<<3只要移位运算就行了,所以2<<3效率高……希望能给你帮助

点评

谢谢  发表于 2012-5-11 22:49
回复 使用道具 举报
因为这样的数据运算在计算机中最终都要转换成二进制来实现 而2<<3属于位运算,是直接操作二进制 免去了转换 。结果当然会比先转换再运算来的快些

点评

谢谢  发表于 2012-5-11 22:49
回复 使用道具 举报
这个涉及到硬件的知识。
如果用移位,就像楼主举例的2*3,移位需要移动三次,就可以得到运算结果。
如果使用乘法,其实是是利用逻辑运算单元ALU在进行加法和移位运算。除了移位之外还会相加,多了一部分计算的时间开销。
所以不用说,使用乘法效率可能就稍微低一些。
但是实际上,对于我们日常使用数据的运算,这样的差别是极其微小的。
一般只有在使用计算机对采集的数据进行大量运算,或者集中对数据的处理,才能看得出效率的差异。
毕竟现在计算机的CPU已经由单核变为多核,数据处理能力已经是今非昔比的了。

我能用文字解释的大概就是这样,如果楼主想要了解更多,可以去参阅 计算机组成原理/计算机组织与结构 等书籍
里面有一部分内容是讲解码制,进制运算,以及运算的硬件实现等。

希望对楼主有所帮助。

点评

大爱。谢谢  发表于 2012-5-11 22:48

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为计算机中的任何指令最终都回到cpu里面执行 而cpu只认识2进制的语言所以直接使用位移运算效率最高

点评

谢谢  发表于 2012-5-11 22:48
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马