在一次看源码过程中,发现移位运算符,花点时间盘盘清楚,并记录下来
public static void main(String[] args) {
// 1000 0000 0000 0000 0000 0000 0001 0000 原
// 1111 1111 1111 1111 1111 1111 1110 1111 反
// 1111 1111 1111 1111 1111 1111 1111 0000 补
int a =-16;
// 补码向右移位,高位补0
// 0111 1111 1111 1111 1111 1111 1111 1000 补
// 0111 1111 1111 1111 1111 1111 1111 1000 反
// 0111 1111 1111 1111 1111 1111 1111 1000 原
// 2147483640
System.out.println(a + " >>> 1 = " + (a>>>1));
// 补码向左移动,低位补0
// 1111 1111 1111 1111 1111 1111 1110 0000 补
// 1111 1111 1111 1111 1111 1111 1101 1111 反
// 1000 0000 0000 0000 0000 0000 0010 0000 原
// -32
System.out.println(a + " << 1 = " + (a<<1));
// 补码向右移动,高位补1
// 1111 1111 1111 1111 1111 1111 1111 1000 补
// 1111 1111 1111 1111 1111 1111 1111 0111 反
// 1000 0000 0000 0000 0000 0000 0000 1000 原
// -8
System.out.println(a + " >> 1 = " + (a>>1));
// 0000 0000 0000 0000 0000 0000 0001 0000 原
// 0000 0000 0000 0000 0000 0000 0001 0000 反
// 0000 0000 0000 0000 0000 0000 0001 0000 补
a = 16;
// 补码向右移位,高位补0
// 0000 0000 0000 0000 0000 0000 0000 1000 补
// 0000 0000 0000 0000 0000 0000 0000 1000 反
// 0000 0000 0000 0000 0000 0000 0000 1000 原
// 8
System.out.println(a + " >>> 1 = " + (a>>>1));
// 补码向左移位,低位补0
// 0000 0000 0000 0000 0000 0000 0010 0000 补
// 0000 0000 0000 0000 0000 0000 0010 0000 反
// 0000 0000 0000 0000 0000 0000 0010 0000 原
// 32
System.out.println(a + " << 1 = " + (a<<1));
}