public static void main(String[] args) {
/* 移位操作*/
//1、左移(<<) n左移m位 result= n*2^m
System.out.println(2 << 3);//16
System.out.println(-2 << 3);//-16
/*-2 <<3
原码:10000010 取反
反码:11111101 +1
补码:11111110 整体左移3位(负数左移补0),溢出的舍弃
移3位:11110000 -1
反码:11101111 取反
结果:10010000 = -16*/
//2、右移(>>) n右移m位 result= n/2^m
/*-2 >>1
原码:10000010 取反
反码:11111101 +1
补码:11111110 右移1位 (负数右移补1)
移位:11111111 -1
反码:11111110 取反
结果:10000001 =-1*/
System.out.println(2 >> 1);//1
System.out.println(2 >> 3);//0
System.out.println(2 >> 13);//0
System.out.println(-2 >> 1);//-1
System.out.println(-2 >> 3);//-1
System.out.println(-2 >> 13);//-1
//3、无符号右移 (>>>)
//无符号右移:正数与右移规则一样,负数的无符号右移,就是相应的补码移位所得,在高位补0即可
System.out.println("无符号右移");
System.out.println(2 >>> 1);//1
System.out.println(2 >>> 3);//0
System.out.println(2 >>> 13);//0
System.out.println(-2 >>> 1);//2147483647
System.out.println(-2 >>> 3);//536870911
System.out.println(-2 >>> 13);//524287
}