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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹震国 中级黑马   /  2014-12-16 23:47  /  1577 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

按照左移运算规则  
一个数左移几位,结果就是这个数乘以2的几次幂。
2<<29位结果是1073741824   //可以理解
2<<30位结果是-2147483648   //理解不了
2<<31位结果是0       //理解不了

请大神指教

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

14 个回复

倒序浏览
我又学学习到了,楼主继续努力噢噢·····
回复 使用道具 举报
2<<31  在int类型中,2的二进制表现形式是30个0+10,共32位。左移了31位把1也给移走了。在原来的32位数中只剩下一个0,然后空余的31位都补0。得到的32位全为0。所以2<<31位结果是0

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

回复 使用道具 举报
因为2的二进制是10;当把2左移一定位数,比如30位的时候就是10000000 00000000 00000000 00000000这个数字就是十进制的-2147483648这个数字,如果在左移1位就是一个特殊情况,程序底层会有一个把最高位舍弃的动作,所以移动31位的时候就是0。
要注意如果移动的位数比int类型的位数大,比如左移33位就会用33%32=1;1的二进制是000000001,会用这个二进制数左移1位得到2左移33位后的数字也就是2左移33位后还是等于2.

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

回复 使用道具 举报
学习了~~~~
回复 使用道具 举报
一个数位移的话,是在数值类型的取值范围里面循环的
回复 使用道具 举报
quick3g 中级黑马 2014-12-17 01:18:05
7#
00000000000000000000000000000010        2
10000000000000000000000000000000      <<30位结果: -2147483648(1移动到了符号位)
00000000000000000000000000000000      <<30位结果:0(左边的1被0取代)
回复 使用道具 举报
看楼上,很明确,左侧第一位是符号位,1代表负数,0代表整数,2左移30位就变成2的31次幂,符号位是1,就是负数,左移结果是-2的31次幂=-2147483648
回复 使用道具 举报
0;;;0   不就那么算吗
回复 使用道具 举报
看基础视频你就明白了
回复 使用道具 举报
那这个运算规则就不成立了???
一个数左移几位,结果就是这个数乘以2的几次幂
回复 使用道具 举报
很不错`````继续努力
回复 使用道具 举报
7楼解释的很直观,就是超出了数值范围,30次方是把1移到了符号位,31次方就溢出了
回复 使用道具 举报
int是三十二位,左移后要考虑一下之后的数是不是在-2^31~2^31-1内,位运算符是二进制运算,从基本去想就明白
回复 使用道具 举报
例2<<3==2*2^3
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马