位元運算 (Bit Manipulation)
Published: Thu Feb 19 2026 | Modified: Sat Feb 07 2026 , 2 minutes reading.
位元運算:總機接線員
演算法背後的故事:開關大師
想像一面巨大的牆,上面裝滿了數百萬個燈光開關。
- 普通程式設計師看著這面牆說:「我想打開『訪客權限』那盞燈。」她們調用一個函數,該函數又調用另一個函數,最終撥動了一個開關。
- 位元運算大師 看著這面牆,他發現整面牆其實就是一個數字。為了同時打開 100 盞燈,他不需要走到每個開關前;他只需要應用一個「掩碼 (Mask)」(一種模式),然後在一奈秒內同時撥動她們。
這就是 位元運算 (Bit Manipulation)。這是一門繞過數字和字串的抽象,直接與 位元 (Bit)(0 和 1)打交道的藝術。在 CPU 內部,其實並沒有「乘法」——只有位移和加法。透過使用這種語言,妳達到了硬體性能的理論極限。
為什麼需要它?
- 標誌位元與權限: 與其使用 8 個布爾變量(佔用 8 個位元組),妳可以將 8 個權限儲存在單個位元組中,每個位元代表一個標誌(例如:讀、寫、執行)。
- 壓縮: 緊湊地打包數據以節省頻寬(例如:用 16 位元而不是 32 位元儲存像素顏色)。
- 性能:
x >> 1通常比x // 2快。x & 1比x % 2快。 - 密碼學: 將數據與密鑰進行異或 (XOR) 運算是幾乎所有流加密演算法的基礎。
演算法是如何「思考」的
位元運算有 4 件核心工具:
- 與 (&): 「兩個開關都打開了嗎?」(用於檢查標誌位元)。
- 或 (|): 「打開其中任何一個開關。」(用於設置標誌位元)。
- 異或 (^): 「兩個開關的狀態不同嗎?」(用於切換狀態和基礎加密)。
- 位移 (<<, >>): 「將所有開關向左/向右滑動。」(用於快速乘以/除以 2 的冪)。
工程決策:XOR 的魔力
異或 (XOR) 是電腦科學中的「魔術」。她有一個獨特的屬性:A ^ B ^ B = A。 如果妳將一個數字與一個密鑰進行兩次異或運算,妳會得到原始數字。這就是為什麼她是加密系統和磁碟陣列 (RAID) 恢復系統的核心。
實作參考 (Python)
def bit_tricks():
x = 10 # 二進位: 1010
# 1. 檢查奇偶性 (最低位技巧)
# 10 & 1 -> 1010 & 0001 -> 0000 (偶數)
is_even = (x & 1) == 0
# 2. 檢查是否為 2 的冪
# 二進位中 2 的冪只有一個 '1' (例如 8 是 1000)
# 8 & 7 -> 1000 & 0111 -> 0000
def is_power_of_two(n):
return n > 0 and (n & (n - 1)) == 0
# 3. 不使用臨時變量交換兩個數 (XOR 技巧)
a, b = 5, 9
a = a ^ b
b = a ^ b
a = a ^ b
# 現在 a=9, b=5
# 4. 計算「1」的個數 (漢明重量)
def count_ones(n):
count = 0
while n:
n &= (n - 1) # 這行神妙的代碼會清除最低位的那一個 '1'
count += 1
return count
return is_even, is_power_of_two(16), a, b, count_ones(7)
# 範例結果
print(bit_tricks()) # (True, True, 9, 5, 3)小結
位元運算教會我們:效率存在於最底層。透過剝離高級類型的舒適感,我們獲得了對機器的完全控制。她提醒我們,無論軟體變得多麼複雜,其核心始終是數百萬個微小開關的美麗舞蹈。
