三大運算符
| 運算符 | 名稱 | 規則 | 等價數學運算 |
<< | 左移 | 低位補 0,高位丟棄 | × 2ⁿ (無溢出時) |
>> | 帶符號右移 | 高位補符號位(算術移位) | ÷ 2ⁿ (向下取整) |
>>> | 無符號右移 | 高位補 0(邏輯移位) | 無符號數 ÷ 2ⁿ |
二進制演示
int n = 10; // 1010
n << 1 → 10100 (20)
n >> 1 → 1010 (10)
n >>> 1 → 1010 (10,正數時與 >> 相同)
// 負數差異
-10 >> 1 → 11111111111111111111111111110101 (-5)
-10 >>> 1 → 01111111111111111111111111110101 (2147483643)
實戰技巧
- 快速乘除 2 的冪:編譯器自動優化,可讀性優先用
*//
- 位掩碼提取:
(value >> shift) & mask
- 標誌位操作:
flags |= (1 << pos) 設置,flags &= ~(1 << pos) 清除
- 無符號右移處理負數哈希:
hash >>> 16 混合高低位
注意事項
- 移位位數對 32 (int) 或 64 (long) 取模:
n << 33 ≡ n << 1
- byte/short/char 參與運算自動提升為 int,結果需強轉
>>> 無長整型版本,long 同理
面試高頻題
2 << 3 = ? (16)
-8 >> 2 = ? (-2)
-8 >>> 2 = ? (1073741822)
- 如何不使用乘除法實現乘 7?
(n << 3) - n
- 上一篇文章: Java Class.forName 核心機制深度解析:動態加載、靜態初始化與 JDBC 驅動註冊
- 下一篇文章: Java IO 體系演進:1.0 字節流與 1.1 字符流對比全解析
Copyright ©
程式碼之家 All Rights Reserved