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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陶吉才 中级黑马   /  2013-6-10 15:33  /  1373 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陶吉才 于 2013-6-10 22:04 编辑

看视频的时候就知道将一个书左移几位,就是乘以2的几次方,那么2*8就是2*2的三次方,就是2<<3,但是我不知道为什么这样就高效了啊??有大侠知道原因吗???详细点啊

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
因为计算机的运算模式是以二进制为基础,所以十进制运算在计算时会被转换成二进制再进行运算,而转换过程就会导致运行速度降低。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
移位运算<<是计算机底层的操作  

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

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

你写的什么 2*8最后都要被翻译成机器语言 这样 会有很多指令在实现你的*运算
所以  还不如直接用直接 用 <<来运算 这倒翻译到机器语言之后  里面的计算机指令的数量远远小于*对应的指令数目

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
因为在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前面补三个零,后面的不要。
这样计算机的运算明显简单多了。明白了吗?

点评

明白了,谢谢  发表于 2013-6-10 22:02

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
移位运算效率高
回复 使用道具 举报
因为电脑采用的是二进制表示数据的,操作起来比较方便
回复 使用道具 举报
本帖最后由 聂_疯 于 2013-6-17 15:35 编辑

简单概括:

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

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


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




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


评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马