黑马程序员技术交流社区

标题: 关于左移运算的问题 [打印本页]

作者: 何苦似梦离    时间: 2014-2-11 14:14
标题: 关于左移运算的问题
左移运算中:比如算2*8 的最快捷方式,肯定使用位运算;编译结果16,源码:System.out.println(2<<3)
那为什么我算2*64的最快捷计算方式,用左移的方式:编译结果为0,源码:System.out.println(2<<31)应该是我源码写错了。
         我的思路:对于这种算法我是用乘数去看是否是被乘数2的倍数,【如果被乘数不是2就不能使用此运算,或者我还没听懂】难道说:左移运算也有取值范围吗?,还请大家解说的详细点,想把基础的每一个细节都学扎石

作者: zzkang0206    时间: 2014-2-11 14:33
System.out.println(2<<31) 这里有问题
2*64,这里的64可以看成2的六次方,所以应该写成System.out.println(2<<6) ;
作者: dongdong5982    时间: 2014-2-11 14:43
zzkang0206 发表于 2014-2-11 14:33
System.out.println(2

同意上面的观点。
另外,int类型占4个字节,32位,2是在第2位上,2 + 31 = 33,已经超出了int型的表示范围了,如果这样打印出来不错的话,那里面的数据都是0了,所以打印出来的也就是0
作者: 未烧开的白开水    时间: 2014-2-11 14:53
这是我有关位运算的部分笔记和你分享一下,希望你能明白!


位运算:
3<<1=3*2^1=3*2=6
3<<2=3*2^2=3*4=12
3<<3=3*2^3=3*8=24
-----------------
<<n:乘以2的n次幂
-----------------
6>>1=6/2^1=6/2=3
6>>2=6/2^2=6/4=1
6>>3=6/2^3=6/8=0
-----------------
>>n:除以2的n次幂
-----------------
>>有符号右移,右移后,最高位是什么补什么。
>>>无符号右移,右移后,最高位不管是什么都补0。


作者: →★稻草人☆    时间: 2014-2-12 14:51
首先一个int型的值是用32个字节表示,其次每次想要乘或除的数都应是2的次幂,移幂的值就行了。可以记住楼上的笔记也行。




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