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

Java 移位運算符詳解:左移、右移與無符號右移的核心差異

     編輯:Java 相關知識

移位運算符核心概念

在 Java 中,移位運算符直接操作二進制位,分為三種:<<(左移)、>>(帶符號右移)和 >>>(無符號右移)。它們能高效實現乘除 2 的冪次運算,廣泛用於網絡協議解析、加密算法等底層開發。

移位運算的類型提升規則

進行移位運算時,byte、short、char 會自動提升為 int 類型。實際移動位數取決於數據類型:

  • int 類型:移動次數對 32 取模(移位 33 次等同於移位 1 次)
  • long 類型:移動次數對 64 取模(移位 66 次等同於移位 2 次)

三種移位運算符深度解析

1. 左移運算符 (<<)

運算規則:二進制位向左平移,高位捨棄,低位補 0。

語法:值 << 位數

範例:3 << 2

3 的二進制:0000...0011
左移 2 位:  0000...1100  → 十進制 12

數學意義:無溢出時,左移 n 位相當於乘以 2n。

2. 帶符號右移 (>>)

運算規則:二進制位向右平移,低位捨棄,高位補符號位(正數補 0,負數補 1)。

範例:11 >> 2

11 的二進制:0000...1011
右移 2 位:  0000...0010  → 十進制 3

數學意義:右移 n 位相當於除以 2n(向下取整)。

3. 無符號右移 (>>>)

運算規則:二進制位向右平移,低位捨棄,高位無條件補 0。正數與 >> 結果相同,負數則不同。

關鍵差異:-16 >> 2 = -4,但 -16 >>> 2 = 1073741820(高位補 0 後變為大正數)。

實戰應用與注意事項

  • 高效乘除:n << 3 比 n * 8 更快;n >> 1 等同 n / 2
  • 位掩碼操作:結合 &、| 實現標誌位提取/設置
  • 避免濫用:業務邏輯優先用算術運算符,提升代碼可讀性

小結

移位運算符是二進制層面的高效工具,掌握其符號位處理差異至關重要。實際開發中,除非涉及位級優化或協議解析,否則建議使用可讀性更強的算術運算符。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved