首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 位元運算詳解:移位、位元 AND、OR、XOR 與 NOT 實戰範例

     編輯:Java 程式設計入門

Java 位元運算核心概念

位元運算是直接對整數的二進位表示進行操作,效率極高,常用於效能敏感場景、旗標處理、加密演算法等領域。Java 提供六種位元運算子:左移(<<)、右移(>>)、無符號右移(>>>)、位元 AND(&)、位元 OR(|)、位元 XOR(^)與位元 NOT(~)。

完整程式碼範例

public class BitwiseDemo {
    public static void main(String[] args) {
        // 1. 左移運算子 (<<)
        // 5 的二進位:0000 0101,左移 2 位 → 0001 0100 (十進位 20)
        System.out.println("5 << 2 = " + (5 << 2));  // 輸出 20

        // 2. 右移運算子 (>>) - 保留符號位
        // 5 右移 2 位 → 0000 0001 (十進位 1)
        System.out.println("5 >> 2 = " + (5 >> 2));   // 輸出 1

        // 3. 無符號右移運算子 (>>>) - 高位補 0
        System.out.println("5 >>> 3 = " + (5 >>> 3));   // 0
        System.out.println("-5 >> 3 = " + (-5 >> 3));     // -1 (算術右移)
        System.out.println("-5 >>> 3 = " + (-5 >>> 3));   // 536870911 (邏輯右移)

        // 4. 位元 AND (&)
        // 只有雙方都是 1 才為 1
        System.out.println("5 & 3 = " + (5 & 3));   // 1 (0101 & 0011 = 0001)
        System.out.println("4 & 1 = " + (4 & 1));   // 0 (0100 & 0001 = 0000)

        // 5. 位元 OR (|)
        // 任一方為 1 即為 1
        System.out.println("5 | 3 = " + (5 | 3));   // 7 (0101 | 0011 = 0111)

        // 6. 位元 XOR (^)
        // 相同為 0,不同為 1
        System.out.println("5 ^ 3 = " + (5 ^ 3));   // 6 (0101 ^ 0011 = 0110)

        // 7. 位元 NOT (~)
        // 逐位取反
        System.out.println("~5 = " + (~5));         // -6 (補碼表示)
    }
}

關鍵點深度解析

移位運算的數學等價關係

  • 左移 n 位:等同於乘以 2n(溢位除外)
  • 算術右移 n 位:等同於除以 2n(向零取整)
  • 無符號右移:將負數視為無符號整數處理,高位補 0

位元運算實戰應用場景

  1. 快速乘除 2 的冪次:x << 3 比 x * 8 更快
  2. 旗標位操作:用 & 檢查、| 設定、^ 切換、~& 清除特定位
  3. 奇偶數判斷:(n & 1) == 1 判斷奇數
  4. 交換兩數:a ^= b; b ^= a; a ^= b; 無需暫存變數
  5. 取模運算優化:x % 2^n == x & (2^n - 1)
  6. 負數的補碼表示補充

    Java 使用二補數表示負數:

    1. 正數的二進位表示
    2. 按位取反(一補數)
    3. 加 1 得到二補數

    例如 -5:5 = 0000...0101 → 取反 1111...1010 → 加 1 → 1111...1011

    效能與最佳實踐

    • 位元運算屬於 CPU 指令級操作,執行速度極快
    • 現代 JIT 編譯器會自動優化乘除 2 的冪次為移位指令
    • 程式碼可讀性較低,建議加註解說明業務含義
    • 注意 int 為 32 位,long 為 64 位,移位量會模 32 或 64
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved