/*
* <<:左移 左边最高位丢弃,右边补齐0
* >>:右移 最高位是0,左边补齐0;最高位是1,左边补齐1
* >>>:无符号右移 无论最高位是0还是1,左边补齐0
* 面试题:
* 请用最有效率的方式写出计算2乘以8的结果?
* 2 << 3
*/
public class OperatorDemo {
public static void main(String[] args) {
//<< 把<<左边的数乘以2的移动次幂
System.out.println(3<<2);//3*2^2=12
//>> 把>>左边的数除以2的移动次幂
System.out.println(24>>2);//24/2^2=6
System.out.println(24>>>2);
System.out.println(-24>>>2);
}
}
/*
* <<左移:
* 计算出3的二进制:11
* 00000000 00000000 00000000 00000011
* (00)000000 00000000 00000000 0000001100
* >>右移:
* 计算出-24的二进制:11000
* 原码:10000000 00000000 00000000 00011000
* 反码:11111111 11111111 11111111 11100111
* 补码:11111111 11111111 11111111 11101000
* 1111111111 11111111 11111111 111010(00)
* 反码:1111111111 11111111 11111111 111001
* 原码:1000000000 00000000 00000000 000110
* 结果:-6
* >>
*/