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

Java 移位操作符詳解:<<、>>、>>> 與補碼機制

     編輯:Java 綜合教學

Java 移位操作符詳解:<<、>>、>>> 與補碼機制

Java 移位操作僅適用於 int 和 long;byte、short、char 會先提升為 int 再移位。三種運算符:

  • << 左移:低位補 0,符號位參與移動。
  • >> 帶符號右移:正數高位補 0,負數高位補 1(符號位延伸)。
  • >>> 無符號右移:無論正負,高位均補 0。

注意:無 <<< 運算符;移位不循環(移出的位丟棄)。所有運算基於二進制補碼進行。

示例程序與輸出分析

public class Shift {
    public static void main(String[] args) {
        System.out.println("=== 正數左移低位補0 ===");
        int a = 1;
        a = a << 2; // 4 -> 100
        System.out.println(a);
        System.out.println(Integer.toBinaryString(a));

        System.out.println("=== 正數右移高位補0 ===");
        a = 1;
        a = a >> 2; // 0
        System.out.println(a);
        System.out.println(Integer.toBinaryString(a));

        System.out.println("=== 負數右移高位補1 ===");
        int i = -1; // 32個1
        System.out.println(i + ": " + Integer.toBinaryString(i));
        i = i >> 2; // 仍為 -1
        System.out.println(i + ": " + Integer.toBinaryString(i));

        System.out.println("=== 負數左移低位補0 ===");
        i = i << 2; // -4 -> ...11111100
        System.out.println(i);
        System.out.println(Integer.toBinaryString(i));

        System.out.println("=== >>> 無符號右移高位補0 ===");
        i = -1;
        System.out.println(Integer.toBinaryString(i));
        i = i >>> 10; // 4194303 -> 22個1
        System.out.println(i + ": " + Integer.toBinaryString(i));

        System.out.println("=== byte 類型移位需強轉 ===");
        byte k = 10; // 1010
        System.out.println(Integer.toBinaryString(k));
        k = (byte) (k >>> 2); // 10 -> 2
        System.out.println(Integer.toBinaryString(k));
    }
}

關鍵點總結

  1. 正數 << 相當於乘 2n,>> 相當於除 2n(向下取整)。
  2. 負數 >> 保持符號,>>> 會變為大正數。
  3. byte、short、char 移位前先提升為 int,結果需強制轉回原類型。
  4. 移位運算符優先級低於算術運算符,複雜表達式建議加括號。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved