位運算模擬器(AND、OR、XOR、NOT、移位)
對兩個數值計算 AND、OR、XOR、NOT、左移、右移,並通過二進位制網格直觀展示每一位的變化。支援 8/16/32 位寬。
什麼是位元運算
位元運算會把數值視為二進位(由 0 與 1 組成)的位元序列,然後逐位進行邏輯運算。AND(與)、OR(或)、XOR(互斥或)、NOT(取反)、移位(左移/右移)是最具代表性的五種運算,全部都是 CPU 能直接執行的基礎指令,速度遠比加減乘除等算術運算快得多。在程式語言中通常寫作 `&`、`|`、`^`、`~`、`<<`、`>>`,廣泛應用於旗標管理、權限控制、加密演算法、影像處理等場景。
本工具可以指定數值 A、數值 B(NOT 只使用數值 A)以及位寬(8/16/32 位),並以網格的形式將運算結果逐位視覺化呈現。數值可以用十進位輸入,也可以加上 `0x`(十六進位)或 `0b`(二進位)字首,寫法與程式碼中的表示方式一致。超出所選位寬範圍的數值無法被正確表示,因此先決定好位寬,有助於正確理解運算結果。
位元運算模擬器的使用方法
- 選擇位寬 從 8/16/32 位中選擇要模擬的位寬。若不確定該選哪一種,建議先從 8 位開始,位元數較少,變化也更容易一眼看懂。
- 選擇運算型別 從 AND、OR、XOR、NOT、左移、右移中選擇要執行的運算。選擇 NOT 時,輸入框會自動切換為只需一個數值。
- 輸入數值 在數值 A(AND/OR/XOR/移位時也需要數值 B)欄位中,以十進位、`0x` 十六進位或 `0b` 二進位的形式輸入數字;若選擇移位運算,還需另外指定移位位數。
- 查看結果網格 輸入完成後,結果會自動計算並以逐位網格顯示。黃色高亮的位元代表相對於數值 A 發生了變化,可用來追蹤每一位的運算過程。
- 對照十進位與十六進位表示 結果列下方會同時顯示十進位與十六進位的表示法,方便與程式碼中實際使用的數值格式進行比對。
用好本工具的小技巧
- 數值不僅可以輸入十進位制,還可以使用 `0x1A` 形式的十六進位制或 `0b1010` 形式的二進位制字首,直接照抄程式碼中的寫法即可。
- AND、OR、XOR 需要兩個數值,NOT 只需要一個數值。切換運算型別時,輸入框數量會自動調整。
- 右移(`>>>`)本工具只支援邏輯移位。它與保留符號位的算術移位有何不同,請參見下方常見問題。
- 將位寬從 8 位切換到 16 位、32 位,可以直觀看到同一個數值的高位會補上更多的 0,有助於理解“位寬”的真正含義。
- 黃色高亮的位表示演算前後發生變化的位。使用 AND、OR 時,可以直觀追蹤哪個輸入值在每一位上“勝出”。
位元運算的實際應用場景
程式設計學習中驗證位元運算子
在學習 C、Java、Python 等語言時,AND、OR、XOR、NOT、移位這些運算子的結果往往難以心算,尤其是 NOT 與移位。透過視覺化的網格逐位確認,可以更快建立正確的直覺。
設計位元旗標與權限系統
Unix 檔案權限、將多個開關狀態壓縮進一個整數管理的“位元旗標”手法,都是位元運算的實際應用。可以先在本工具中試算 AND 遮罩提取、OR 設定旗標等操作,確認邏輯無誤後再寫進程式。
競賽程式設計與位元遮罩演算法驗證
位元遮罩 DP、集合的位元表示等競賽程式設計常見手法,往往需要先用較小的數值手動驗證邏輯是否正確。本工具可以快速確認每一步運算的中間結果。
搭配進位制轉換確認十六進位與二進位
在確認運算結果的同時,也能一併查看數值對應的十進位、十六進位、二進位表示,適合與進位制轉換工具搭配使用,理解不同進位表示法之間的關係。
色彩碼與網路位址/子網路遮罩計算
從 `#FF0000` 這類色彩碼中提取紅、綠、藍分量,或計算 IP 位址與子網路遮罩的 AND 結果,都是位元運算在日常開發中常見的實際用途。
位元運算相關用語集
- AND(與)
- 只有當兩個位元都為 1 時,結果才為 1,其餘情況皆為 0。常用於遮罩操作,提取數值中特定的位元。
- OR(或)
- 只要有任一位元為 1,結果就為 1。常用於置位操作,將指定的位元設為 1。
- XOR(互斥或)
- 只有當兩個位元不同時,結果才為 1;相同則為 0。常用於翻轉特定位元、交換數值,或偵測兩個數值之間的差異。
- NOT(取反)
- 將單一數值的所有位元反轉(0 變 1、1 變 0)。結果的具體表示會因所選位寬而異。
- 移位運算
- 將整個位元排列向左或向右平移。左移相當於乘以 2 的冪次,右移(本工具採用邏輯移位)相當於除以 2 並捨去餘數。
- 位元遮罩
- 與 AND、OR 等運算搭配使用、用來提取或修改特定位元的數值。例如 `0b00001111` 可用來提取數值最低的 4 個位元。
- 位寬
- 表示一個數值所使用的位元數量。8 位可表示 0~255,16 位可表示 0~65535,超出範圍的數值無法在該位寬下正確表示。
- 二進位與十六進位表示法
- 二進位只使用 0 與 1 表示數值,十六進位則使用 0~9 與 A~F。由於每 4 個二進位位元恰好對應 1 位十六進位數字,十六進位常被當作二進位的簡潔書寫方式。
常見問題
閒話 ― XOR 的奇妙特性與實際應用
位運算直接對應計算機內部的邏輯電路,是 CPU 能夠執行得最快的運算之一,通常只需一個時鐘週期。由於所需電路遠比乘法、除法簡單,效能敏感的場景(影像處理、加密演算法、網路協議實現等)長期以來都會用位運算技巧來替代開銷更大的算術運算。
XOR(異或)有一些有趣的性質:一個值與自身異或結果恆為 0(`a ^ a = 0`),與 0 異或則結果保持原值不變(`a ^ 0 = a`)。利用這兩條性質,可以在不使用臨時變數的情況下交換兩個變數的值,這就是經典的“異或交換法”(`a ^= b; b ^= a; a ^= b;`)。出於可讀性考慮,現代實際專案中已不太推薦使用,但它至今仍是理解位運算特性的經典教學示例。
位掩碼在實際系統中應用廣泛。Unix 檔案許可權(讀=4、寫=2、執行=1)本質上就是位運算的 OR 與 AND;從顏色程式碼 `#FF0000` 中提取紅、綠、藍各分量,也是通過右移配合 AND 掩碼實現的。將多個開關狀態壓縮排一個整數中管理的“位標誌”技巧,也曾在記憶體有限的舊遊戲和系統程式設計中被廣泛使用。