>> 和 >>> 有无符号右移的简单分析
/*
*-1原码 1000 0000 0000 0000 0000 0000 0000 0001
*-1反码 1111 1111 1111 1111 1111 1111 1111 1110 取反 符号位不变
*-1补码 1111 1111 1111 1111 1111 1111 1111 1111 取反最后+1 符号位不变
* 计算机使用的是补码
* >>为带符号右移 >>>无符号右移
*/
public class demo {
public static void main(String[] args){
//-1的二进制码为1000 0000 0000 0000 0000 0000 0000 0001
// 先取补码1111 1111 1111 1111 1111 1111 1111 1111
// 右移一位1111 1111 1111 1111 1111 1111 1111 1111
// 转换回原码 1000 0000 0000 0000 0000 0000 0000 0001
// 因为补码全为1 而且符号位不会变 只要是带符号右移 -1无论多少次都是-1
int i = -1;
i >>= 1;
System.out.println(i);
int j = -1;
j >>= 20;
System.out.println(j);
//使用无符号右移时 结果就会变化 因为最高位会补0 对正数没有影响 因为正数最高位是0 而负数是1
i >>>= 3;
System.out.println(i);
}
}