位元實驗台

點一排位元開關,無號、二補數、十六進位讀數同時翻動 — 位元沒變,變的是讀法。

位元列 A 上方是每格的位權;最高位在二補數下是負的

位元列 A 的五種讀法

二進位 Binary
0000 0000
無號 Unsigned
0
有號(二補數) Signed
0
十六進位 Hex
00
八進位 Octal
0

全部在瀏覽器內運算,不送出任何資料。另見 進位制轉換器(換算進位制,不演位元運算)。

關於位元實驗台

位元本身沒有值,有值的是讀法。同一排 1111 1111,用無號讀法讀是 255;用二補數(有號)讀法讀是 −1。位元一個都沒動,換的是怎麼讀它。這個工具讓位元列成為唯一的真相來源:點下去就翻,底下所有讀法同時跟著更新。

「取負」操作演示二補數的 −x = ~x + 1 定義:先全部位元取反(~x),再從最低位加一,進位從右向左漣波直到遇見第一個 0 位元停下。工具把這兩拍分開演出:第一拍整排瞬間取反,第二拍一顆冷青火花沿位元列橫向推進。當操作使符號位元(最高位)意外翻轉,有號讀數突變正負,那一格會被框住指認出來。

32 位元模式的所有讀法一律以 BigInt 計算,完全繞開 JavaScript 位元運算子 32 位有號的限制(例如 1 << 31 在 JS 會是負數)。邏輯右移(>>>)在 8/16 位元模式下以無號遮罩手算,保持語意正確。術語對照:二補數、符號位元、最高位元(MSB)、算術右移(>>)、邏輯右移(>>>)、符號延伸、溢位、進位漣波。

快速導覽

使用情境、常見問題與相關工具

把需要的說明放在工具下方,讓第一次使用與之後回來複用都更順。

英文搜尋: twos complement visualizer、bit flip toggle tool、signed vs unsigned binary、arithmetic vs logical shift、int8 overflow demo、sign extension binary

使用方式

先完成一次順手的操作

  1. 直接點那排位元開關就能改值;1 = 亮起凸出,0 = 熄滅內凹。
  2. 用寬度按鈕切換 8 / 16 / 32 位元;按「取負」或 +1 看進位漣漪動畫與溢位指認。
  3. 切到「位移」模式同時看算術(>>)和邏輯(>>>)右移分岔;切到「位元運算」模式逐欄對齊 AND / OR / XOR / NOT。

常見情境

這個工具實際適合拿來做什麼

  • 全 1 讀法對照(8-bit all ones)把 8 顆開關全打開(11111111)。下方拆解式直接寫出 −128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = −1 — 最高位的位權是負的,這就是同一排位元既讀 255 又讀 −1 的原因。
  • 溢位現行犯:127 + 1載入 01111111 按 +1,進位漣漪一路撞進符號位元,有號讀數 127 → −128,被翻轉的 MSB 立刻被框住指認出來。
  • 取負演給你看:對 8 取負載入 8(00001000)按「取負」。第一拍整排取反成 11110111,第二拍一顆冷青火花從最低位往左跑過三格、停在 bit 3,落定 11111000 = −8。−x = ~x + 1 變成看得見的動作(挑 8 不挑 5,是因為 5 的進位一步就停,看不出火花在跑)。
  • 位移分身:−16 右移 1 位載入 11110000,在位移模式右移 1 位:算術(>>)得 11111000(−8),邏輯(>>>)得 01111000(120),兩列並排一目了然。

常見問題

先把常見疑問說清楚

為什麼同一排 1111 1111 又是 255 又是 −1?

位元本身沒有值,值來自讀法。無號讀法把八個 1 當純二進位=255;二補數(有號)讀法把最高位當符號位元,1111 1111 代表 −1。位元一個都沒變,換的是怎麼讀它。

「取負」為什麼是 ~x + 1,而不是把正負號翻過來?

二補數取負的定義就是逐位取反再加一。以 5(0000 0101)為例:取反得 1111 1010,最低位 +1 得 1111 1011,那正是 −5。工具把這兩拍(取反、進位 +1)演出來,讓 −x = ~x + 1 變成看得見的動作。

int8 的 127 加 1 為什麼變成 −128?

0111 1111 加 1 時進位一路往左推,撞進最高位(符號位元),結果 1000 0000。無號讀是 128,但有號讀法看到符號位元變 1,就成了 −128。工具會把翻掉符號的那一格框起來指認出來。

>>(算術右移)和 >>>(邏輯右移)差在哪?

正數時兩者一樣;負數時分岔。算術右移補進符號位元(維持負號),邏輯右移補 0。以 1111 0000 右移 1 位為例:算術得 1111 1000(−8),邏輯得 0111 1000(120)。工具同時把兩列並排。

這跟 number-base-converter 有什麼不同?

number-base-converter 是「換算」— 你給一個值,它換成各種進位。位元實驗台是「讀法與運算」— 位元本身是輸入,你點它、對它取負/位移/做位元運算,看同一排位元在不同讀法下同時如何變化。兩支互相內鏈。