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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

 有C背景的程序员特别喜欢问这种问题。


  2 << 3


求解 2<<3什么意思,为什么是最有效率的方法?

12 个回复

倒序浏览
本帖最后由 杨尧 于 2012-5-21 18:46 编辑

这是移位法
位运算效率最高
2 左移3位 就是乘以8
回复 使用道具 举报
杨尧 发表于 2012-5-21 18:44
这是移位法
位运算效率最高
2 左移3位 就是乘以8

java中没用过"<<"这符号能具体说下不?
这个符号用得多么?
回复 使用道具 举报
2向左移3位就是:2乘以2的3次方
计算机中的所有运算最终都是数据的位运算,所有直接通过位运算进行的算术运算是最有效率的。
回复 使用道具 举报
因为计算机是二进制的,而如果用传统的十进制计算机还会自己优化编译,底层走的还是二进制。而使用位计算就是利用直接使用了二进制。2左移3位,就相当于乘以二进制的“1000”,也就是十进制的“8”。其实无论是什么进制系统,移位总是比较快的计算,就是乘以10的次幂(对应各自的进制系统)。所以这里使用二进制是比较快的!!!
回复 使用道具 举报
胥江 发表于 2012-5-21 18:52
java中没用过"

恩,其实如果有学过计算机体系结构的话应该对移位比较熟悉,因为浮点数那一章开头就是讲移位。左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动,即在低位补0.需要说明的是移位操作符只可用来处理整数类型,因为精度、计算的问题。掌握移位最好能联系一下计算机中的正负数的原码、补码等表示形式。java中比起c或c++增添了一种“无符号”右移位操作符(>>>),它的计算方式是无论正负都在高位插入0.恩,用的多么?这个只能看情况了,还是老话,具体情况具体分析!
回复 使用道具 举报
2<<3
移位法 把2的二进制左移三位
相当于2乘以2的三次方
回复 使用道具 举报
余宏 中级黑马 2012-5-21 19:46:39
8#
2<<3 = 16
计算方法如下
2 的二进制是 00000010 然后向左移3位后得到 00010000  再转换为十进制是 16 .
位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算,
因此,该运算比较有效率
回复 使用道具 举报
1234567*7654321  这个呢 最快怎么算 也能做不?
回复 使用道具 举报
java的源码里面用的较多,因为老外编写这个源码的时候他们非常讲究效率和内存的使用。但是在国内....好像都是无足轻重的
回复 使用道具 举报
首先,计算机的底层是2进制形式,那么2*8是十进制的运算,首先计算机要把十进制转换成2进制在运算.
因此,计算机的底层运算,是二进制运算,位运算的效率要比代码中编写十进制运算效率更高...
  * @param 移位运算符
         * 移位运算符是相对于二进制而言,下面是移动规则
         * 左移: "a<<b" 将二进制形式的 a逐步向左边移动b位,最低位空出的b位补0
         * 带符号右移:"a>>b"将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位
         * 无符号右移:"a>>>b"将二进制形式的a逐位右移b位,最高位空出的b位补0
         *
         * 左移相当于乘,左移一位相当于乘以2,左移两位相当于乘以4吗,左移三位相当于剩8,右移相当于除法,右移一位相当于除以2,右移两位相当于除以4,右移三位相当于除以8
         * 一般来说,位运算是做计算机的底层运算,其运算的效率要比乘除法高.而且满足2的幂次方的乘除运算,都可以采用位移的方式进行.

回复 使用道具 举报
2<<3 是位移运算。就是把2的二进制数向左移动3位,不足用0补齐。比如:
2的2进制是  00000000 00000000 00000000 0000 0010 像左移动3为就变成 (000)(这里的3个0移没了)00000 00000000 00000000 0000 0010 000 (在后面加3个0) 这个数的十进制数就是16,即2乘以8.。位移的运算效率非常高。
位移运算有一个规律  就是向左移动几位 就乘以2的几次方  向右移动几位就除以2的几次方
回复 使用道具 举报
就是二进制11左移三位,也就是2乘以2的三次方。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马