>>考虑符号,>>>不考虑符号 正数在计算机以原码保存;负数以补码保存 public static void main(String[] args) { System.out.println(4>>1); //00000000 00000000 00000000 00000100 -> 4的原码 //00000000 00000000 00000000 00000010 -> 移动 //在正数情况下 >> >>>一样, System.out.println(-4>>2); //10000000 00000000 00000000 00000100 -> -4的原码 ,但是计算机不是这么保存 //11111111 11111111 11111111 11111100 -> -4的补码 这才是计算机保存方式 >>补码右移1 高位补符号位即1 //11111111 11111111 11111111 11111110 由于此时符号位还是1是负数求原码 //10000000 00000000 00000000 00000010 -> 取反+1 -2 >>>无符号右移1 高位补0 ,此时符号位为0 正数补码与原码一样
//01111111 11111111 11111111 11111110 -> >>>移动 (2147483646) // }
总结,正数情况下 >> >>>没区别
负数情况下>>补位1 >>>补位0 ,负数在计算机以补码表示,展示出来需要转换成原码代表此时的值