java得>> <<

“>>” :右移,正数右移,高位补0,负数右移,高位补1
“>>>”:右移,高位补0,不区分正数负数
<<:左移,低位补0,不区分正数负数
注:1.左移右移符号位也一起移动
2.高位低位补1/0是指:移动完后空出来的位全部补1/0
3.不存在<<<这个运算符

原码,反码,补码回顾:
正数:原码=反码=补码
负数:原码;反码=原码除符号位外取反;补码=反码+1=原码除符号位外取反+1
注:补码的补码=原码,即符号位不变,其余位取反+1

a的值为:-16
a>>2的值为:-4
a>>>2的值为:1073741820
a<<2的值为:-64

1:先说>>: 2的二进制为00000010(32位),>>1得到00000001,即为1;
2: -2的二进制为10000010(32位,原码)=11111110(32位,补码),>>1得到11111111(32位,补码)=10000001(32位,原码),即为-1;
3: 再说>>>: 2的二进制为00000010(32位),>>>1得到00000001,即为1;
4: -2的二进制为10000010(32位,原码)=11111110(32位,补码),>>>1得到01111111(32位,补码)=01111111(32位,原码),即为int最大值;

你可能感兴趣的:(随笔)