在 Java 中,移位運算符直接操作二進制位,分為三種:<<(左移)、>>(帶符號右移)和 >>>(無符號右移)。它們能高效實現乘除 2 的冪次運算,廣泛用於網絡協議解析、加密算法等底層開發。
進行移位運算時,byte、short、char 會自動提升為 int 類型。實際移動位數取決於數據類型:
<<)運算規則:二進制位向左平移,高位捨棄,低位補 0。
語法:值 << 位數
範例:3 << 2
3 的二進制:0000...0011
左移 2 位: 0000...1100 → 十進制 12
數學意義:無溢出時,左移 n 位相當於乘以 2n。
>>)運算規則:二進制位向右平移,低位捨棄,高位補符號位(正數補 0,負數補 1)。
範例:11 >> 2
11 的二進制:0000...1011
右移 2 位: 0000...0010 → 十進制 3
數學意義:右移 n 位相當於除以 2n(向下取整)。
>>>)運算規則:二進制位向右平移,低位捨棄,高位無條件補 0。正數與 >> 結果相同,負數則不同。
關鍵差異:-16 >> 2 = -4,但 -16 >>> 2 = 1073741820(高位補 0 後變為大正數)。
n << 3 比 n * 8 更快;n >> 1 等同 n / 2&、| 實現標誌位提取/設置移位運算符是二進制層面的高效工具,掌握其符號位處理差異至關重要。實際開發中,除非涉及位級優化或協議解析,否則建議使用可讀性更強的算術運算符。