黑马程序员技术交流社区

标题: 2*8的问题 [打印本页]

作者: 李月    时间: 2012-5-8 14:04
标题: 2*8的问题
为什么用2 << 3的方法算出2乘以8等于几,是最有效率的?

作者: 杨锦    时间: 2012-5-8 14:53
<<是移位指令,二进制计算,相当于编译好后的程序,机器直接执行效率当然要高
作者: 龚正军    时间: 2012-5-8 15:00
计算机在计算的时候是用二进制计算的。
人在计算的时候习惯用十进制计算。

如果你需要计算机计算效率最好,当然要用计算机最熟悉的二进制去计算效率最高啊,因为不管人给予计算机什么数据,最终要计算机去运算或则计算都是计算机通过转换成计算机知道的二进制数据再处理的。

2×8是人熟悉的十进制计算方式。
2<<3是计算机熟悉的2进制计算方式。--------------------当然你用计算机熟悉的方式让计算机计算效率最高!
作者: 隋营营    时间: 2012-5-8 15:54
本帖最后由 隋营营 于 2012-5-9 18:28 编辑

简单理解:
2 * 8 相当于 0010 << 1000 因为CPU执行加、减、乘、除运算最终都转换成 乘法 运算,而乘法运算的实质就是移位:移位是CPU可以执行的基本操作

2 << 3 相当于 0010 的所有二进制位向左移动3个二进制位

个人认为位运算(2 << 3)之所以比乘法运算(2 * 8)效率高是因为跳过了乘法(*)运算转换成二进制运算(<<)的时间!
欢迎批评指正!
作者: 张成龙    时间: 2012-5-8 16:02
位运算时cpu直接支持的,所以通过移位操作的运算效率是最高的;
作者: 韩慧阳    时间: 2012-5-8 16:05
因计算机内部的乘除运算期最终都是移位运算,如果用2 << 3就省去了编译中的转换,或者说是*的翻译吧(这句是大白话,但是容易理解),所以如果这样的运算多,那么效率就会比你用2*8高很多。
位移相信你明白的2<<3就是0000 0010中的1左移动3个位置,就是0001 0000了,
作者: 梁清平    时间: 2012-5-8 17:45
搞清楚这个问题首先得搞清楚位移运算在计算机内存中的原理..这个可以看一下毕老师关于位移运算符的那段视频..就会很明确..
2*8需要进过几层的转换..后输出..
2<<3就不一样了..直接在内存中位移后相对应的数字就是计算结果.
作者: It's_Zero    时间: 2012-5-9 12:34
2/8  需要将2和8都转成2进制位,然后再执行 除法运算  然后再把所得到的 2进制位相加 运算得到结果
而2>>3移位运算则只要将2转成2进制位  然后往往右移 3  位 ,直接得到结果,比原来的2/8 效率高
作者: HeiMaYSL    时间: 2012-5-9 13:07
简单的说:2 << 3 是用二进制的移位运算的,
而我们都电脑呢,在处理数据时,就是用二进制计算的。
如果让计算机计算2*8的话,还要经过一系列的转换哦。
所以,对于计算机来说,二进制的运算是比较快的。呵呵
作者: 荣天    时间: 2012-5-9 17:13
计算机  二进制
   效率高




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