位元移位運算子

Java 運算式說明章節

位元位移運算子 Shift Operator

種類

  • int1 << int2 右移運算:左移後右邊位元補 0。

  • int1 >> int2 左移運算:右移後左邊位元補原最左位元值。

  • int1 >>> int2 左移運算:右移後左邊位元補 0。

Shift.java
public class Shift {

	public static void main(String[] args) {
		
		int i = 2;
		System.out.println("i = " + i + " , 二進制為 00000000000000000000000000000010" );
		System.out.println("i << 1 =>> " + (i << 1) );
		System.out.println("        00000000000000000000000000000010");
		System.out.println("     << 0000000000000000000000000000010_");
		System.out.println("=>>     00000000000000000000000000000100");
		int j = 2;
		System.out.println("j = " + j + " , 二進制為 00000000000000000000000000000010" );
		System.out.println("j >> 1 =>> " + (j >> 1) );
		System.out.println("        00000000000000000000000000000010");
		System.out.println("     >> _0000000000000000000000000000001");
		System.out.println("=>>     00000000000000000000000000000001");
		int k = 2;
		System.out.println("k = " + k + " , 二進制為 00000000000000000000000000000010" );
		System.out.println("k >>> 1 =>> " + (k >>> 1) );
		System.out.println("        00000000000000000000000000000010");
		System.out.println("    >>> _0000000000000000000000000000001");
		System.out.println("=>>     00000000000000000000000000000001");
		j = -2;
		System.out.println("j = " + j + " , 二進制為 11111111111111111111111111111110" );
		System.out.println("j >> 1 =>> " + (j >> 1) );
		System.out.println("        11111111111111111111111111111110");
		System.out.println("     >> _1111111111111111111111111111111");
		System.out.println("=>>     11111111111111111111111111111111");
		k = -2;
		System.out.println("k = " + k + " , 二進制為 11111111111111111111111111111110" );
		System.out.println("k >>> 1 =>> " + (k >>> 1) );
		System.out.println("        11111111111111111111111111111110");
		System.out.println("    >>> _1111111111111111111111111111111");
		System.out.println("=>>     01111111111111111111111111111111");

	}

}
執行結果
i = 2 , 二進制為 00000000000000000000000000000010
i << 1 =>> 4
        00000000000000000000000000000010
     << 0000000000000000000000000000010_
=>>     00000000000000000000000000000100

j = 2 , 二進制為 00000000000000000000000000000010
j >> 1 =>> 1
        00000000000000000000000000000010
     >> _0000000000000000000000000000001
=>>     00000000000000000000000000000001

k = 2 , 二進制為 00000000000000000000000000000010
k >>> 1 =>> 1
        00000000000000000000000000000010
    >>> _0000000000000000000000000000001
=>>     00000000000000000000000000000001

j = -2 , 二進制為 11111111111111111111111111111110
j >> 1 =>> -1
        11111111111111111111111111111110
     >> _1111111111111111111111111111111
=>>     11111111111111111111111111111111

k = -2 , 二進制為 11111111111111111111111111111110
k >>> 1 =>> 2147483647
        11111111111111111111111111111110
    >>> _1111111111111111111111111111111
=>>     01111111111111111111111111111111

備註:

  • 在使用位移運算時,會先將左邊的運算元轉換成 int 型別,然後才會進行位移的運算。

最后更新于