黑马程序员技术交流社区

标题: 关于2*8的最高效算法 请高人指点一下 [打印本页]

作者: 陶吉才    时间: 2013-6-10 15:33
标题: 关于2*8的最高效算法 请高人指点一下
本帖最后由 陶吉才 于 2013-6-10 22:04 编辑

看视频的时候就知道将一个书左移几位,就是乘以2的几次方,那么2*8就是2*2的三次方,就是2<<3,但是我不知道为什么这样就高效了啊??有大侠知道原因吗???详细点啊
作者: w270307032    时间: 2013-6-10 15:46
因为计算机的运算模式是以二进制为基础,所以十进制运算在计算时会被转换成二进制再进行运算,而转换过程就会导致运行速度降低。
作者: 张歆明    时间: 2013-6-10 17:50
移位运算<<是计算机底层的操作  

最底层的就是机器语言
再好一点就是汇编语言  汇编语言里面就明确把移位运算作为一种基本的指令  

这两种都是操作都是针对计算机底层处理的

你写的什么 2*8最后都要被翻译成机器语言 这样 会有很多指令在实现你的*运算
所以  还不如直接用直接 用 <<来运算 这倒翻译到机器语言之后  里面的计算机指令的数量远远小于*对应的指令数目
作者: 十字路口    时间: 2013-6-10 19:32
因为在java中int是占4个字节所以在计算机中转换为二进制位有32位
2*8在计算机中是这样运算的:先将2转换为:0000 0000 0000 0000 0000 0000 0000 0010
                                                将8转换为:* 0000 0000 0000 0000 0000 0000 0000 1000
  然后计算机是这样进行二进制的乘法运算的:-------------------------------------------------------------------------
                                                                      0000 0000 0000 0000 0000 0000 0000 0000
                                                                    0000 0000 0000 0000 0000 0000 0000 0000
                                                                  0000 0000 0000 0000 0000 0000 0000 0000
                                                                0000 0000 0000 0000 0000 0000 0000 0010
最后的到的结果为:                  ------------------------------------------------------------------------
                                                                000 0000 0000 0000 0000 0000 0000 0001 0000

也就是我们后面看到的16了。而如果你进行一位运算的话:0000 0000 0000 0000 0000 0000 0000 0010
                         直接左移三位计算机是这样做的:     000 | 0 0000 0000 0000 0000 0000 0000 0010000前面补三个零,后面的不要。
这样计算机的运算明显简单多了。明白了吗?


作者: qinchog    时间: 2013-6-17 12:16
移位运算效率高
作者: 知行    时间: 2013-6-17 14:26
因为电脑采用的是二进制表示数据的,操作起来比较方便
作者: 聂_疯    时间: 2013-6-17 15:31
本帖最后由 聂_疯 于 2013-6-17 15:35 编辑

简单概括:

计算机识别步骤:  机器语 0/1----------------->  高级语言

人到机处理步骤:  高级语言   ----------------->   机器语言


所以不管任何东西如果考虑高效率,你就应该替机器着想它只识别0/1(不然也不叫机器了开个玩笑)怎么能简化机器语言这层处理的步骤,而位移刚好做到了这点




以上是个看法,有用可以按照这思路进行考虑







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