public class test {
public static void main(String[] args) {
for(int j = 32; j >=0; j--)
      {int  i=1 << j;
        System.out.println(i);}}
}
结果为:1
-2147483648
1073741824
536870912
268435456
我的理解32转换成INT为00000000 00000000  00000000 00000000 00100000
左移一位应该为00000000 00000000  00000000 00000000 01000000 也就是64
而且后来的负数怎么来的?谢谢了

解决方案 »

  1.   

    在左移位(<<)运算时,如果要移位的位数大于被操作数对应数据类型所能表示的最大位数,那么先将要求移位数对该类型所能表示的最大位数求余后,再将被操作数移位所得余数对应的数值,效果不变。所以1<<31=(31%16)
    =1<<15=-2147483648  
      

  2.   

    int类型是32位,移动31位是正常的,
    超过了这个数据范围,ls解释过了
      

  3.   

    同意10#.
    int 是有符号的32位.
    最高位为符号位.
    所以,1 移位 31 次后,它变成负数了.
    它是对 %32 的数进行移位的.
      

  4.   

    这是错误的.
    移位只有int类型右操作数对32取余以及long类型右操作数对64位取余两种情况,没有15的.