“>>是有符号位移,>>>是无符号位移”,如果移动的是一个非负数,这两个是没有任何区别的比如我们看下
public static void main(String args[]) {
System.out.println();
int num = 10000;
System.out.println(num + "的二进制表示: " + Util.bitInt32(num));
System.out.println(num + "有符号位移之后的二进制表示:" + Util.bitInt32(num >> 3));
System.out.println(num + "无符号位移之后的二进制表示:" + Util.bitInt32(num >>> 3));
}
我们再来看下运行结果
10000的二进制表示: 00000000 00000000 00100111 00010000
10000有符号位移之后的二进制表示:00000000 00000000 00000100 11100010
10000无符号位移之后的二进制表示:00000000 00000000 00000100 11100010
“>>和>>>主要是对负数会有区别,我们来看下”
public static void main(String args[]) {
System.out.println();
int num = -10000;
System.out.println(num + "的二进制表示: " + Util.bitInt32(num));
System.out.println(num + "有符号位移之后的二进制表示:" + Util.bitInt32(num >> 3));
System.out.println(num + "无符号位移之后的二进制表示:" + Util.bitInt32(num >>> 3));
}
这里把10000改为-10000,再来看下运行结果
-10000的二进制表示: 11111111 11111111 11011000 11110000
-10000有符号位移之后的二进制表示:11111111 11111111 11111011 00011110
-10000无符号位移之后的二进制表示:00011111 11111111 11111011 00011110