在 Java 程式設計中,位元運算子直接操作整數的二進位表示,是底層運算與效能優化的關鍵工具。本文系統整理 &(位元 AND)、|(位元 OR)、^(位元 XOR)三大核心運算子的運算規則、優先級階層與實戰應用場景。
運算規則:將兩個操作數轉為二進位,逐位比較。只有雙方皆為 1 時,結果才為 1;否則為 0。
範例:12 & 10 12 = 1100 (二進位) 10 = 1010 (二進位) ---------------- 結果 = 1000 (二進位) = 8 (十進位)
典型用途:
(n & 1) == 0 為偶數x & ~maskn & (2^k - 1) 等價於 n % 2^k運算規則:逐位比較,雙方只要有一個為 1,結果即為 1;雙方皆為 0 才為 0。
範例:12 | 10 12 = 1100 10 = 1010 ---------------- 結果 = 1110 (二進位) = 14 (十進位)
典型用途:
x | maskREAD | WRITE | EXECUTE)(n | 0) 強制轉 int運算規則:逐位比較,相同為 0,不同為 1。具有「可逆性」與「自反性」。
範例:12 ^ 10 12 = 1100 10 = 1010 ---------------- 結果 = 0110 (二進位) = 6 (十進位)
經典應用:
a ^= b; b ^= a; a ^= b;Java 位元運算子優先級由高到低:
~(位元 NOT,單目)&(位元 AND)^(位元 XOR)|(位元 OR)注意:位元運算子優先級 低於 關係運算子(==, < 等)與算術運算子,但 高於 邏輯運算子(&&, ||)。建議複雜表達式加括號明確語序。
<< 左移:低位補 0,相當於乘以 2n>> 有號右移:保留符號位,相當於除以 2n(向下取整)>>> 無號右移:高位補 0,無符號整數除法int 或 long 位元欄位,配合 &/|/^ 操作,效能遠優於 boolean[] 或 Set。>> 與 >>> 的語義差異。isFlagSet(flags, READ))。