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

Java 移位運算符深度解析:<<、>>、>>> 與負數處理陷阱

     編輯:Java 相關知識

三種移位運算符

運算符名稱行為高位填充
<<左移向左移動指定位數低位補 0
>>有號右移向右移動指定位數符號擴展:正補 0、負補 1
>>>無號右移向右移動指定位數零擴展:無論正負皆補 0(Java 獨有,C/C++ 無)

操作數自動提升規則

  • char、byte、short → 運算前自動轉 int,只用右側 5 位(防止過度移位)
  • long → 結果為 long,只用右側 6 位

無號右移的 byte/short 陷阱

byte b = -1;  // 二進制: 11111111
b >>>= 10;    // 預期: 0000000000... (補 0)
// 實際 Java 1.0/1.1: 自動轉 int 再移位,零擴展失效,結果為 -1

測試代碼驗證當前 JVM 實現:

public class URShift {
    public static void main(String[] args) {
        int i = -1; i >>>= 10; System.out.println(i);
        long l = -1; l >>>= 10; System.out.println(l);
        short s = -1; s >>>= 10; System.out.println(s);
        byte b = -1; b >>>= 10; System.out.println(b);
    }
}

複合賦值形式

<<=、>>=、>>>=:左側值按右側位數移位,結果賦回左側。

實戰演示:BitManipulation.java

完整範例展示所有位運算符對 int/long 的效果,含最大/最小值、補碼表示、各類移位運算的二進制輸出。關鍵觀察點:

  • 高位為符號位:0=正、1=負
  • ~i(按位非)vs -i(取負)的二進制差異
  • >>(符號擴展)vs >>>(零擴展)對負數的不同結果
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved