計算器2026-05-10

位元運算計算機:AND、OR、XOR、移位操作和旗標操作詳解

位元運算是程式設計的刀鋒——它們在位元組或字內的單個位元上操作,讓你直接控制資料的原始二進位表示。算術操作的是作為抽象值的數字,而位元運算操作的是 1 和 0 本身。這就是檔案權限在 Unix 上如何編碼為單個整數,圖形程式設計師如何從像素值中提取 RGB 通道,網路協定如何將多個旗標打包到單個標頭位元組,以及快速雜湊函數和校驗和如何建構。我們的免費位元運算計算機接受兩個運算元(或一個用於 NOT 和移位),在位元級別執行所選操作,並同時在二進位、十六進位和十進位中顯示結果——每個位元位置都有標記,因此你可以準確驗證在哪裡發生了什麼。

memory

位運算計算器

免費 · 無需註冊

免費試用此工具 →open_in_new

分步指南

1

輸入你的運算元

以十進位、十六進位(前綴 0x)或二進位(前綴 0b)輸入兩個數字。計算機接受 32 位元和 64 位元模式——在 32 位元模式下,運算元被視為無符號 32 位元整數(0 到 4,294,967,295)。每個運算元以二進位格式顯示,位元位置從 31(最高有效)到 0(最低有效)編號,因此你可以在應用任何操作之前視覺化哪些位元被設定。

2

選擇位元運算

從七種操作中選擇:AND(&)僅在兩個對應運算元位元都為 1 時將結果位元設定為 1;OR(|)在任一運算元位元為 1 時設定為 1;XOR(^)在恰好一個運算元位元為 1 時設定為 1;NOT(~)反轉單個運算元的每個位元;左移(<<)將所有位元左移 N 位(右側用零填充);邏輯右移(>>>)用零填充右移位;算術右移(>>)用符號位元填充右移位。計算機動畫顯示操作——顯示哪些輸入位元貢獻給每個輸出位元。

3

閱讀多格式結果和位元圖

結果以二進位(32 位元,每 4 位元間隔以提高可讀性)、十六進位(32 位元為 8 個十六進位數字)和十進位顯示。視覺化位元圖突出顯示結果中哪些位置為 1,懸停在任何位元上顯示哪些輸入位元產生了它。複製按鈕讓你立即以任何格式取得結果——二進位用於文件,十六進位用於程式碼,十進位用於計算。

使用技巧與最佳實踐

check_circle

位元遮罩是最常見的位元運算模式:使用 AND 與遮罩提取特定位元。要取得 32 位元值的最低 8 位元:value & 0xFF(255)。要測試第 3 位元是否設定:(value & (1 << 3)) !== 0。要清除第 5 位元:value & ~(1 << 5)。要設定第 7 位元:value | (1 << 7)。要翻轉第 2 位元:value ^ (1 << 2)。這四種模式——測試、清除、設定、翻轉——涵蓋了實務中 90% 的位元操作。

check_circle

顏色通道提取是經典的位元運算使用案例。打包成 32 位元整數(0xRRGGBB)的 RGB 像素可以解包為:red = (pixel >> 16) & 0xFF, green = (pixel >> 8) & 0xFF, blue = pixel & 0xFF。一行程式碼,你就使用右移和 AND 遮罩提取了三個顏色通道。ARGB(alpha 通道)使用頂部 8 位元:alpha = (pixel >> 24) & 0xFF。

check_circle

左移 1 位元等於乘以 2;右移 1 位元等於除以 2(整數除法,算術移位向零捨入,邏輯移位向負無限方向)。左移 N 位元等於乘以 2 的 N 次方。右移 N 位元等於除以 2 的 N 次方。CPU 在單個時脈週期內執行移位,使得對於 2 的冪次,它們比通用乘法/除法快得多。

check_circle

XOR 交換是不使用暫存變數交換兩個變數的經典技巧:a ^= b; b ^= a; a ^= b。在這個序列之後,a 和 b 交換了值。它有效是因為 XOR 是可交換的、可結合的,且 x ^ x = 0, x ^ 0 = x。在現代程式碼中,這主要是一種新奇事物——編譯器對標準交換最佳化同樣好——但它是 XOR 代數性質的一個很好的示範。

check_circle

權限旗標將多個開/關設定打包到單個整數中。Unix 檔案權限使用 12 位元:底部 9 位元是擁有者/群組/其他人的 rwx(每個 r=4, w=2, x=1)。較高位元編碼 setuid(4000)、setgid(2000)和 sticky(1000)。每個權限是可以獨立測試或修改的單個旗標——這是幾乎所有 C API 中每個旗標參數背後的模式。

check_circle

CRC(循環冗餘檢查)和校驗和計算大量使用 XOR 和移位操作。基本的 CRC-8 實作將每個資料位元組 XOR 到執行暫存器中,然後移位並有條件地與多項式 XOR。這產生一個 8 位元「指紋」,用於檢測資料的意外更改。我們的計算機讓你逐步通過這樣的演算法,逐位元檢視它們如何工作。

check_circle

右移運算子有兩種類型:邏輯右移(JavaScript/Java 中的 >>>),用零填充空出的最左邊位元;算術右移(大多數語言中的 >>),用符號位元的副本填充(保留有符號整數的符號)。將 -8(8 位元有符號中的 11111000)算術右移 1 位元得到 -4(11111100);邏輯移位得到 124(01111100),一個完全不同的值。

常見問題解答

按位元 AND(&)對兩個數字的各個位元進行操作:5 & 3 = 1,因為 101 & 011 = 001。邏輯 AND(&&)對布林真值進行操作:5 && 3 在 JavaScript 中返回 3(真值),在嚴格型別語言中返回 true。按位元 AND 產生一個數字;邏輯 AND 產生一個布林值。在 `if` 陳述式中混淆它們是常見錯誤——`if (x & 1)` 測試最低位元是否設定(奇數檢查),而 `if (x && 1)` 檢查 x 是否為真值(由於短路求值返回 x,完全忽略 1)。

位元運算是電腦可以執行的最小和最快的操作——字面上一個 CPU 週期,一個邏輯閘層深度。我們的計算機使這些操作可見,準確顯示哪些位元改變以及為什麼。無論你是在打包旗標、提取顏色通道還是除錯密碼學實作,都可以看到你的位元的完整細節。

免費試用此工具 →open_in_new