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类型,结果相会相同。