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

Java 運算符 >、>>、>>> 詳細差異解析

     編輯:Java 相關知識

Java 關係運算符與位移運算符完整對比

外觀相似但語意截然不同的三個符號:> (大於)、>> (算術右移)、>>>> (邏輯右移)。

1. > (大於比較)

  • 二元關係運算符,比較左右操作數大小。
  • 結果型別:boolean。
  • 適用於數值型別、實作 Comparable 的物件。
int a = 5, b = 3;
boolean result = a > b; // true

2. >> (算術右移 / 帶符號右移)

  • 將位元模式向右移動指定位數,高位補符號位 (正數補 0、負數補 1),保持正負號不變。
  • 等價於除以 2 的冪次 (向零取整)。
int x = 15;      // 0000 1111
int r1 = x >> 2; // 0000 0011 = 3  (15 / 4 = 3)

int y = -15;     // 1111 0001 (補碼)
int r2 = y >> 2; // 1111 1100 = -4 (保持負號)

3. >>> (邏輯右移 / 無符號右移)

  • 向右移動,**高位永遠補 0**,不管正負。
  • 負數會變成極大的正數 (因為符號位變 0)。
  • Java 無 `<<<` (邏輯左移),因為左移高位補 0 行為與算術左移相同。
int x = 15;       // 0000 1111
int r1 = x >>> 2; // 0000 0011 = 3  (正數同 >>)

int y = -15;      // 1111 0001
int r2 = y >>> 2; // 0011 1100 = 1073741820 (變巨大正數)

完整測試程式

public class ShiftDemo {
    public static void main(String[] args) {
        System.out.println("1. > 比較: 5 > 3 = " + (5 > 3));

        System.out.println("\n2. >> 算術右移:");
        System.out.println("15 >> 2 = " + (15 >> 2)); // 3
        System.out.println("-15 >> 2 = " + (-15 >> 2)); // -4

        System.out.println("\n3. >>> 邏輯右移:");
        System.out.println("15 >>> 2 = " + (15 >>> 2)); // 3
        System.out.println("-15 >>> 2 = " + (-15 >>> 2)); // 1073741820

        // 位運算實用技巧
        System.out.println("\n4. 實用技巧:");
        System.out.println("快速除以 2^n: 100 >> 3 = " + (100 >> 3)); // 12
        System.out.println("判斷奇偶: (n & 1) == 1 -> " + ((7 & 1) == 1)); // true
        System.out.println("清除最低位 1: n & (n-1) -> " + (12 & 11)); // 8 (1100 & 1011)
    }
}

其他位運算符速查

運算符名稱範例結果
~按位取反 (NOT)~5-6
&按位與 (AND)5 & 31
|按位或 (OR)5 | 37
^按位異或 (XOR)5 ^ 36
<<左移3 << 212
>>=邏輯右移賦值x >>>= 2x = x >>> 2

常見應用場景

  • 位標誌 (Bit Flags):`permission = READ | WRITE`、`if ((perm & READ) != 0)`。
  • 哈希碼混合:`h = (h << 5) - h + key.hashCode()` (String.hashCode 核心)。
  • 高效乘除 2 的冪:編譯器常自動優化 `x * 8` → `x << 3`。
  • 網路協定/序列化:位元組序拼裝解析。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved