short c=1;
char c=1;
int c=1;
long c=1;
System.out.println(c<<16);
输出都是65535,为什么啊?

解决方案 »

  1.   

    因为1<<16就等于65535,你还想要什么值啊?
      

  2.   

    1       == 00000000 00000000 00000000 00000001
    1 << 16 == 00000000 00000001 00000000 00000000 
    //向左移动了16位,转换成10进制就等于65536
      

  3.   


    对char,short,byte进行移位操作时,系统会自动把他们转化为int,然后再进行移位操作
      

  4.   

    不管是什么类开型的1,即使是占位最少的char类型,也要占2个字节16位(java中的char与C不同,占两个字节),00000000 00000001 ,其它类型的占位更多,但也只是在左边多几个0而已,最低位的1左移十六位就变成十进制的65536 了(1左边的0的左移并不影响结果)。