int a=5;"isO<
    System.out.println(a<<33);
结果是多少?why?

解决方案 »

  1.   

    结果是10原因:<<是左移运算符。在涉及运算符的时候,就是将原来的数字对应的补码往左边移动一定的位数比如说b=3对应的二进制补码是11, b<<2, 往左边移动两位变为1100。对应的十进制是12b=5,补码是101,b<<1,变为1010,十进制是10又因为计算机存数的最大的位数是32位(不知道是这个原因,还是因为int类型占4个字节,即32位),因此不可能向左边无限移动,计算机对于超出范围的移动是这样处理的:循环。即你向移动n位,计算机实际移动n%32.所以,你这个题目中的33变为了1     
    5的补码向左边移动1位即是10。 
      

  2.   

    a 是 int 类型的,我们知道int是4个字节,32位,a<<32 与a是一样的,所以a<<33相当于a<<1,a<<相当于a*2,所以结果是10。
    而且int的第三十二位是符号位,如果这一位是1,表示的是负数。
    long的规律也是一样的。
      

  3.   

    java使用32位来存储int
    long 64 位貌似
      

  4.   

    如果是System.out.println(a<<-3);呢更多详情在这里http://hi.baidu.com/freish/blog/item/7dc95c0f53028d206159f3ef.html