int xx=12其二进制0000,0000,0000,0000,0000,0000,0000,1100,>>32循环移动32位当然没有变化了。
>>33循环移动33位其最后四位就变成0110,其余位不变为0,结果就是6.byte xx = 12;用byte定义的变量,移动时要先进行向int的转化,变成
0000,0000,0000,0000,0000,0000,0000,1100,>>8循环移动8位后,变成:
0000, 1100, 0000,0000,0000,0000,0000,0000,最后要转化成byte输出,直截取了低16位,结果为0;

解决方案 »

  1.   

    移位时先和32取余在以位,byte xx = 12;用byte定义的变量,移动时要先进行向int的转化,变成
    0000,0000,0000,0000,0000,0000,0000,1100,>>8循环移动8位后,变成:
    最后要转化成byte输出,直截取了低16位,结果为0;
      

  2.   

    new_zero(Swing)  正确,第一个人乱说的
      

  3.   

    java里没有循环移位这说
    只有算术右移和逻辑右移
      

  4.   

    引用Thinking in Java 2nd 中的话:
    运算符右端所指定的位移个数,仅有较低的5个为有用。
      

  5.   

    因此,楼主的问题解答如下:
    int xx = 12;
    System.out.println(xx>>33);
    相当于:
    int xx = 12;
    System.out.println(xx>>1);
    因此,输出为6;而:
    byte xx = 12;
    System.out.println(xx>>8);
    因为右移8位,xx已经全为0了,因此输出为0,这一点上,其实byte和int没有区别
    int xx1 = 12;
    System.out.println(xx1>>8);
    同样输出为0
      

  6.   

    danceflash(Wine) ( ) 说的对