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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何苦似梦离 中级黑马   /  2014-2-11 14:14  /  1484 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 淡定

查看全部评分

4 个回复

倒序浏览
System.out.println(2<<31) 这里有问题
2*64,这里的64可以看成2的六次方,所以应该写成System.out.println(2<<6) ;
回复 使用道具 举报 1 0

同意上面的观点。
另外,int类型占4个字节,32位,2是在第2位上,2 + 31 = 33,已经超出了int型的表示范围了,如果这样打印出来不错的话,那里面的数据都是0了,所以打印出来的也就是0

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这是我有关位运算的部分笔记和你分享一下,希望你能明白!


位运算:
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。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先一个int型的值是用32个字节表示,其次每次想要乘或除的数都应是2的次幂,移幂的值就行了。可以记住楼上的笔记也行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马