在java中,有三种位移操作运算符
左移 <<
带符号右移>>
无符号右移动>>>
1 左移
public static void main(String args[]){ int a = 1; int b = -1; System.out.println(Integer.toBinaryString(a)); System.out.println(Integer.toBinaryString(a<<1)); System.out.println("--------------"); System.out.println(Integer.toBinaryString(b)); System.out.println(Integer.toBinaryString(b<<1)); }
1 10 -------------- 11111111111111111111111111111111 11111111111111111111111111111110
左移的规则比较简单,在低位补零就可以了
2 右移
public static void main(String args[]){ int a = 1; int b = -1; System.out.println(Integer.toBinaryString(a)); System.out.println(Integer.toBinaryString(a>>1)); System.out.println("--------------"); System.out.println(Integer.toBinaryString(b)); System.out.println(Integer.toBinaryString(b>>1)); }1 0 -------------- 11111111111111111111111111111111 11111111111111111111111111111111右移的规则区分了正负若符号为正,则在高位补0若符号为负,则在高位补13 无符号右移
上面第二部分的>>实际上是一种有符号的右移动,如果想要实现无符号的位移,可以使用>>>这样不论符号正负,高位一律补0。public static void main(String args[]){ int a = 1; int b = -1; System.out.println(Integer.toBinaryString(a)); System.out.println(Integer.toBinaryString(a>>>1)); System.out.println("--------------"); System.out.println(Integer.toBinaryString(b)); System.out.println(Integer.toBinaryString(b>>>1)); }
1
0
--------------
11111111111111111111111111111111
1111111111111111111111111111111 //这里高位补零了,所以缺一位