右移(>>):
对于正数,右移n位就相当于除以2的n次方;
对于负数,右移n位就相当于除以2的n次方然后减1;
结果是:-15/16-1

解决方案 »

  1.   

    >> 带符号右移,高位补充符号,1111 0001 >>4=1111 1111 = -1    右移有逻辑右移和算术右移
      

  2.   

    >>是带符号的右移,这里符号是1,所以右移时左边是置1,而不是0,如果>>>就是00001111了
      

  3.   

    >>和>>>是有区别的。
      

  4.   

    public static void main(String[] args)
        {
            byte b = (byte)0xF1 ;
            
            //1.
            System.out.println(b >>> 4);
            //2.
            System.out.println(b >>> 28);
            //3.将扩大后的高24bit置为0吧
            System.out.println(((b & 0xFF) >>> 4));
            //4.既然知道了是8bit那就右移后直接去低4位
            System.out.println(b >> 4 & 0x0F);
        }楼上的各位已经解释了 >>与>>>的区别了 以上代码除了1不能正常输出15外其余都可以 我也一直没想明白一旦byte溢出 Java为什么会将其扩大成int类型
      

  5.   

    关于左移,右移的操作方法:
        对于byte类型的数据,右移时,要看高位,如果高位是1,右移时高位应该补1,如果高位是0,就应该补0;左移时低位均要补0。
        对于符号>>和>>>这个的区别在于,不论高位的符号位是什么,高位均要补0。
       十进制1的八位二进制位表示为00000001,取反加1的结果就是11111111,其表示十进制的-1。
      

  6.   

    关于左移,首先要看当前类型所占的位数,然后表示出来,然后看高位为0或者1,>>是带符号左移,如果最高位是0,那么就补零,如果最高位是1,那么就补1