Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

Java 有用資源

Java - 位運算子及示例



Java 定義了幾個位運算子,這些運算子可以應用於整數型別,如 long、int、short、char 和 byte。

位運算子作用於位並執行逐位操作。假設 a = 60 且 b = 13;現在以二進位制格式,它們將如下所示:

a = 0011 1100
b = 0000 1101
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a  = 1100 0011

下表列出了位運算子:

假設整數變數 A 為 60,變數 B 為 13,則:

運算子 描述 示例
& (按位與) 二進位制 AND 運算子將位複製到結果中,如果它存在於兩個運算元中。 (A & B) 將得到 12,即 0000 1100
| (按位或) 二進位制 OR 運算子複製一個位,如果它存在於任何一個運算元中。 (A | B) 將得到 61,即 0011 1101
^ (按位異或) 二進位制 XOR 運算子複製一個位,如果它在一個運算元中設定但不在兩個運算元中都設定。 (A ^ B) 將得到 49,即 0011 0001
⁓ (按位取反) 二進位制一補碼運算子是單目運算子,其作用是“翻轉”位。 (⁓A) 將得到 -61,由於帶符號二進位制數,因此在 2 的補碼形式中為 1100 0011。
<< (左移) 二進位制左移運算子。左運算元的值向左移動由右運算元指定的位數。 A << 2 將得到 240,即 1111 0000
>> (右移) 二進位制右移運算子。左運算元的值向右移動由右運算元指定的位數。 A >> 2 將得到 15,即 1111
>>> (零填充右移) 右移零填充運算子。左運算元的值向右移動由右運算元指定的位數,並用零填充移位的值。 A >>>2 將得到 15,即 0000 1111

以下程式是演示位運算子的簡單示例。將以下 Java 程式複製並貼上為 Test.java 檔案,並編譯和執行這些程式:

示例 1

在此示例中,我們建立了兩個變數 a 和 b 並使用了位運算子。我們執行了按位 AND 和按位 OR 操作並列印了結果。

public class Test {

   public static void main(String args[]) {
      int a = 60;	/* 60 = 0011 1100 */
      int b = 13;	/* 13 = 0000 1101 */
      int c = 0;

      c = a & b;        /* 12 = 0000 1100 */
      System.out.println("a & b = " + c );

      c = a | b;        /* 61 = 0011 1101 */
      System.out.println("a | b = " + c );
   }
}

輸出

a & b = 12
a | b = 61

示例 2

在此示例中,我們建立了兩個變數 a 和 b 並使用了位運算子。我們執行了按位 XOR 和補碼操作並列印了結果。

public class Test {

   public static void main(String args[]) {
      int a = 60;	/* 60 = 0011 1100 */
      int b = 13;	/* 13 = 0000 1101 */
      int c = 0;

      c = a ^ b;        /* 49 = 0011 0001 */
      System.out.println("a ^ b = " + c );

      c = ~a;           /*-61 = 1100 0011 */
      System.out.println("~a = " + c );
   }
}

輸出

a ^ b = 49
~a = -61

示例 3

在此示例中,我們建立了兩個變數 a 和 b 並使用了位運算子。我們執行了左移、右移和零填充右移操作並列印了結果。

public class Test {

   public static void main(String args[]) {
      int a = 60;	/* 60 = 0011 1100 */
      int c = 0;

      c = a << 2;       /* 240 = 1111 0000 */
      System.out.println("a << 2 = " + c );

      c = a >> 2;       /* 15 = 1111 */
      System.out.println("a >> 2  = " + c );

      c = a >>> 2;      /* 15 = 0000 1111 */
      System.out.println("a >>> 2 = " + c );
   }
}

輸出

a << 2 = 240
a >> 2  = 15
a >>> 2 = 15
java_basic_operators.htm
廣告