黑马程序员技术交流社区

标题: 位运算问题 [打印本页]

作者: 马姗姗    时间: 2014-1-5 20:42
标题: 位运算问题
本帖最后由 马姗姗 于 2014-1-6 13:48 编辑

2*4=8;
最快的算法是位运算
2<<3;
这个意思是2的3次方的意思吗?


但是当3*8
最快算法的时候是3<<3;//24
但是这样是不是3的3次方 这样不就是27 吗?
为什么结果还是24呢?

作者: 小悠久    时间: 2014-1-5 20:52
<<表示左移, 左移一位表示原来的值乘2.
这里3<<3 是指向左移3位,也就是3*2^3=24.
我给你个网址有关于位运算的详细介绍你看下:
http://www.cnblogs.com/highriver/archive/2011/08/15/2139600.html
作者: 快乐的黑马    时间: 2014-1-5 20:53
2<<3;
这个意思是2的3次方的意思吗?
亲,这个不是,这是2*2的3次方的意思,运算结果是16,而不是8,要得8是2<<2

但是当3*8
最快算法的时候是3<<3;//24
但是这样是不是3的3次方 这样不就是27 吗?
同理,你3*8等于3<<3

这里位移只能针对2,不可以对别的数字。

作者: 松毛    时间: 2014-1-5 21:00
是这样的:2<<3--> 2*2(3)即2乘以2的3次方;
3<<3--->3*2(3)即3乘以2的3次方;
即n<<m---->就是n乘以2的m次方。

作者: 小小菜鸟    时间: 2014-1-5 21:12
这个问题你本身对位运算就理解错误:2<<3是2*2^3=16;
所以3<<3是3*2^3=24;
作者: 净坛使者    时间: 2014-1-5 21:13
2<<3=2的三次方;x<<y就是x乘以2的y次方。
作者: XiaoS    时间: 2014-1-5 21:17
“<<”是左移运算符,用于对运算对象的二进制数进行操作,将二进制的每一位向左移,左移几位,低位就补几个0。将某个数的二进制数左移几位就相当于用个数乘以2的几次方。所以2<<3就是将2的二进制数往左移3位,就是2乘以2的3次方,结果就是16,同理,3<<3就是将3的二进制数向左移3位,就是3乘以2的3次方,结果就是24。因为计算机是二进制的,所以使用位运算符可以提高运算效率。与“<<”相对应的的是“>>”右移运算符,就是将某个数的二进制数右移几位就相当于用个数除以2的几次方。




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