关于二进制位移“>>”和“>>>”的区别小结

来源:互联网 发布:事业单位会计软件 编辑:程序博客网 时间:2024/06/09 00:42

1.“>>”即带符号位移
我们将-20右移四位结果为-2

public static void main(String[] args) {        int  x=-20;        System.out.println(">>"+(x>>4));        //10000000 00000000 00000000 00010100(原)         //11111111 11111111 11111111 11101011(反)        //11111111 11111111 11111111 11101100(补)         //----带符号右移4位---->后a的值        //11111111 11111111 11111111 11111110(补码)->        //11111111 11111111 11111111 11111101(反码)->        //10000000 00000000 00000000 00000010(原码)    }

2.“>>>”右移时,空余位都填充0
最后的结果是268435454

public static void main(String[] args) {        int  x=-20;        System.out.println(">>>"+(x>>>4));        //10000000 00000000 00000000 00010100(原)        //11111111 11111111 11111111 11101011(反)        //11111111 11111111 11111111 11101100(补)        //----不带符号右移4位---->b的值        //00001111 11111111 11111111 11111110(补码)        //00001111 11111111 11111111 11111110(反码)        //00001111 11111111 11111111 11111110(原码)    }

总结:可以看出来,两个值是不同的,如果这里把位移后的接受值强转为byte类型,结果相会相同。