程式設計師計算器與位運算計算器

輸入一個表示式,可以使用 0x 十六進位制、0b 二進位制、0o 八進位制字面量,位運算子 & | ^ ~,移位 << >> >>>,迴圈移位以及普通四則運算 — 結果會以十進位制、十六進位制、八進位制、二進位制四種進位制即時更新,字長可選 8、16、32 或 64 位,有符號/無符號均可。下方還有可點選的位網格、雙運算元位運算面板(AND / OR / XOR / NAND / NOR / NOT / 移位 / ROL / ROR)和單位元置位 / 清零 / 翻轉。只需進位制轉換、不涉及位邏輯請看進位制轉換器;統計計算請看統計計算器。
字長   檢視   運算子:& | ^ ~ << >>> + - * / % ( ) — 僅整數運算,結果按字長迴繞。
DEC
HEX
OCT
BIN
位按最高位在左顯示;變暗的單元格在當前字長之外。
位序號(0 = 最低位)
A =    B =  A 和 B 接受完整表示式(例如 1 << 12)。
A 和 B 都能解析後就會出現結果表。移位與迴圈移位的次數取自 B。
試個例子:
移位的行為:<< 會先按字長取模(從頂部掉出去的位就丟了)。>>> 始終是邏輯(無符號)右移。>> 跟隨檢視選擇器:有符號模式下是算術移位,無符號模式下是邏輯移位。隱私:整個計算器都在當前標籤頁內執行 — 無伺服器、無儲存。

什麼是程式設計師計算器?

程式設計師計算器做的是計算機儲存數值的方式:固定寬度的位元字。它不是一條無盡的數軸 — 8 位字是 256 個值組成的一個圓環,32 位字是 4,294,967,296 個值的圓環。每個結果都會迴繞進這個圓環,同一組位元既可以按無符號計數來讀(0 … 255),也可以按有符號二進位制補碼來讀(-128 … 127)。上方的四個進位制行是同一組位元的四種寫法 — 改一個,另外三個跟著變。

為什麼程式設計師離不開十六進位制

一個十六進位制位正好是 4 個二進位制位,所以一個位元組永遠是兩個十六進位制位,32 位字永遠是八個。

二進位制十六進位制十進位制
1111 11110xFF255
0001 01100x1622
1000 00000x80128(有符號時是 -128)

一段話看懂二進位制補碼

要把一個字讀成有符號數,看最高位。如果是 0,值就是無符號計數本身。如果是 1,減去圓環的大小:8 位的 0xFF 是 255 − 256 = −1。竅門就這麼點 — -x 和 0 - x 產生的位元完全相同,所以同一套加法器硬體對兩者都適用。取負號就是"每一位取反,再加 1":NOT(0x01) = 0xFE,+1 = 0xFF = −1。

移位運算子速覽

運算子名稱8 位示例(a = 0xF0)
a << 1左移0xE0 — 最高位掉出去,低位補 0
a >> 1(無符號)邏輯右移0x78 — 高位補 0
a >> 1(有符號,a = −16)算術右移0xF8 = −8 — 符號位被複制
a >>> 1始終是邏輯移位0x78 與檢視選擇器無關
rol(a, 1)迴圈左移0xE1 — 掉出的最高位從底部重新進入

本頁幫你避開的常見錯誤

算術移位與邏輯移位:複製符號位(算術)與補零(邏輯)在最高位為 1 時結果不同 — 切換檢視選擇器,觀察 0xF0 >> 1 在 0x78 和 0xF8 之間變化。
53 位意外:JavaScript 的普通 Number 是隻有 53 個安全整數位的 64 位浮點數,所以 0xFFFFFFFFFFFFFFFF 無法精確表示 — 本頁內部使用精確的 64 位整數運算,你看到的每一個十六進位制位都可信。
浮點陷阱:0.1 + 0.2 在浮點數里著名的給出 0.30000000000000004;本計算器按設計只做整數 — 除法向零截斷,與 C 語言對整數用 / 完全一致。
前導零:在老式 C 裡 052 這樣的字面量表示八進位制。這裡十進位制就是普通數字,八進位制必須帶 0o 字首,不會有歧義。

常見問題

最大的數是多少? — 64 位無符號:18,446,744,073,709,551,615(0xFFFFFFFFFFFFFFFF);有符號:±9,223,372,036,854,775,808。
為什麼 1 << 8 變成了 0? — 字長是 8 位;第 8 位不存在,掩碼把它丟掉了。切到 16/32/64 位就能保留。
~ 做什麼? — 按位取反:當前字長內每一位都翻轉,所以 ~0 是全 1(255 / 65535 / −1 …)。
有浮點數嗎? — 沒有,只做整數;浮點、三角函式請用科學計算器。
有資料離開我的電腦嗎? — 沒有:無伺服器、無儲存、無統計;關掉標籤頁一切消失。