黑马程序员技术交流社区

标题: 为什么2乘以8用2<<3运算效率最高?<已解决。谢谢各位> [打印本页]

作者: 黑马-王建雨    时间: 2012-5-10 22:32
标题: 为什么2乘以8用2<<3运算效率最高?<已解决。谢谢各位>
本帖最后由 啷个里个郞 于 2012-5-11 16:54 编辑

为什么2乘以8用2<<3运算效率最高?
作者: 李啸    时间: 2012-5-10 22:57
因为计算机中的任何指令最终都回到cpu里面执行 而cpu只认识2进制的语言所以直接使用位移运算效率最高
作者: 云惟桉    时间: 2012-5-10 22:59
这个涉及到硬件的知识。
如果用移位,就像楼主举例的2*3,移位需要移动三次,就可以得到运算结果。
如果使用乘法,其实是是利用逻辑运算单元ALU在进行加法和移位运算。除了移位之外还会相加,多了一部分计算的时间开销。
所以不用说,使用乘法效率可能就稍微低一些。
但是实际上,对于我们日常使用数据的运算,这样的差别是极其微小的。
一般只有在使用计算机对采集的数据进行大量运算,或者集中对数据的处理,才能看得出效率的差异。
毕竟现在计算机的CPU已经由单核变为多核,数据处理能力已经是今非昔比的了。

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

希望对楼主有所帮助。
作者: 游兴钟    时间: 2012-5-10 22:59
因为这样的数据运算在计算机中最终都要转换成二进制来实现 而2<<3属于位运算,是直接操作二进制 免去了转换 。结果当然会比先转换再运算来的快些
作者: 余耀明    时间: 2012-5-10 23:03
这里涉及CPU运算器的实现原理。CPU做因为移位运算比作乘法运算效率高,而对于cpu做乘法运算,实现的原理是移位运算+加法运算实现的(也有CPU是直接乘法器,效率不高)。2乘以8运算要进行移位和加法运算,而2<<3只要移位运算就行了,所以2<<3效率高……希望能给你帮助
作者: 黄燕京    时间: 2012-5-11 01:59
因为在内存中数据都是以二进制的方式保存的
十进制的数据左移一位相当于将其乘以10,而二进制的数据左移一位相当于将其乘以2

作者: 黄坚声    时间: 2012-5-11 07:41
2<<3属于移位运算,该运算直接使用二进制运算原理,比普通运算2*8速度更快。
作者: 黄坚声    时间: 2012-5-11 07:55
二进制运算原理在中间少了很多运算过程。
普通运算中间还有很多复杂的处理过程。
所以2<<3速度比2*8快。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2