黑马程序员技术交流社区
标题:
<<运算的小问题
[打印本页]
作者:
曹震国
时间:
2014-12-16 23:47
标题:
<<运算的小问题
按照左移运算规则
一个数左移几位,结果就是这个数乘以2的几次幂。
2<<29位结果是1073741824 //可以理解
2<<30位结果是-2147483648 //理解不了
2<<31位结果是0 //理解不了
请大神指教
作者:
王海生
时间:
2014-12-16 23:53
我又学学习到了,楼主继续努力噢噢·····
作者:
飞跃离开
时间:
2014-12-16 23:57
2<<31 在int类型中,2的二进制表现形式是30个0+10,共32位。左移了31位把1也给移走了。在原来的32位数中只剩下一个0,然后空余的31位都补0。得到的32位全为0。所以2<<31位结果是0
作者:
zmhlnrs
时间:
2014-12-17 00:08
因为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.
作者:
呢?
时间:
2014-12-17 00:13
学习了~~~~
作者:
青衫禅客
时间:
2014-12-17 00:25
一个数位移的话,是在数值类型的取值范围里面循环的
作者:
quick3g
时间:
2014-12-17 01:18
00000000000000000000000000000010 2
10000000000000000000000000000000 <<30位结果: -2147483648(1移动到了符号位)
00000000000000000000000000000000 <<30位结果:0(左边的1被0取代)
作者:
清诗纪事
时间:
2014-12-17 20:14
看楼上,很明确,左侧第一位是符号位,1代表负数,0代表整数,2左移30位就变成2的31次幂,符号位是1,就是负数,左移结果是-2的31次幂=-2147483648
作者:
dandan520
时间:
2014-12-17 20:19
0;;;0 不就那么算吗
作者:
jxlovqqvo
时间:
2014-12-17 22:10
看基础视频你就明白了
作者:
曹震国
时间:
2014-12-17 23:23
那这个运算规则就不成立了???
一个数左移几位,结果就是这个数乘以2的几次幂
作者:
王海生
时间:
2014-12-17 23:43
很不错`````继续努力
作者:
探寻者
时间:
2014-12-18 00:06
7楼解释的很直观,就是超出了数值范围,30次方是把1移到了符号位,31次方就溢出了
作者:
林文龙
时间:
2014-12-18 05:51
int是三十二位,左移后要考虑一下之后的数是不是在-2^31~2^31-1内,位运算符是二进制运算,从基本去想就明白
作者:
lgc黑马
时间:
2014-12-18 07:39
例2<<3==2*2^3
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2