進位轉換器

輸入 2 到 36 進位或 Base62 表示的整數,即可同時看到它的二進位、八進位、十進位、十六進位、Base36 和 Base62 形式。任意位數的數字都能精確轉換。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 輸入要轉換的數字。
  2. 選擇這個數字所用的進位,可選 2 到 36 進位或 Base62。
  3. 同時檢視二進位、八進位、十進位、十六進位、Base36 和 Base62 的結果。
  4. 如需其他進位,把它設為自定義目標進位即可。

轉換的是數值,不是位元組

本工具轉換的是數字的值。十進位的 255 在二進位中是 11111111,八進位是 377,十六進位是 ff,Base36 是 73。

Base16、Base2 這類位元組編碼做的是另一件事:它們編碼的是文字或檔案。文字 255 由三個字元組成,對應的位元組用十六進位表示是 32 35 35,用二進位表示是 00110010 00110101 00110101。想求一個數的十六進位,請用本頁;想求字元或檔案的十六進位,請用位元組編碼工具。

位值制的原理

在任何進制中,每一位的權重都是進位數的若干次方,指數從最右邊的 0 開始依次增加。十六進位 ff 等於 15 × 16 + 15 = 255,二進位 11111111 等於 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255。超過 10 的進位用字母繼續表示數字,在 Base36 中 a 代表 10,z 代表 35。Base62 還加入了另一種大小寫的字母,因此在 Base62 中大寫和小寫字母代表不同的值。

一位十六進位數字正好對應 4 個二進位位,一位八進位數字對應 3 個二進位位。所以程式設計師常用十六進位和八進位來簡寫二進位:1111 1111 按組轉換就是 ff。

超大數和負數

本工具使用任意精度整數(JavaScript BigInt),再長的數字也能保持精確。很多計算器和普通的 JavaScript 數值在超過 9007199254740991(2 的 53 次方減 1)後會丟失精度。例如 parseInt('ffffffffffffffff', 16) 返回 18446744073709552000,而正確的值是 18446744073709551615,即 64 位無符號整數的最大值。

負數轉換時保留負號,所以 -255 的十六進位是 -ff。這不是記憶體中定長整數使用的補碼形式。如果需要補碼,先加上 2 的位寬次方:以 8 位為例,-1 + 256 = 255,即 ff。本工具只支援整數,不支援小數。所有計算都在瀏覽器中完成。

在程式碼中進行進位轉換

// JavaScript
parseInt('ff', 16);                          // 255
(255).toString(2);                           // '11111111'
BigInt('0xffffffffffffffff').toString(10);   // '18446744073709551615'

# Python
int('ff', 16)                  # 255
bin(255), oct(255), hex(255)   # ('0b11111111', '0o377', '0xff')

常見問題

如何把二進位轉換成十進位?

輸入二進位數,選擇 2 進位,然後檢視十進位結果。手動計算時,把每個 1 所在位的權重相加即可:二進位 1010 等於 8 + 2 = 10。

如何把十進位轉換成十六進位?

選擇 10 進位並輸入數字,檢視十六進位結果即可。手動計算時,反覆除以 16,再把餘數倒序寫出:255 除以 16 得 15 餘 15,結果就是 ff。

數字的大小有限制嗎?

沒有固定上限。工具使用 BigInt 運算,幾百位的數字也能精確轉換,只是特別長的數字需要稍多一點時間。

為什麼這裡 255 的十六進位和 Base16 編碼工具的結果不一樣?
本頁轉換的是數字 255,結果是 ff。Base16 編碼工具轉換的是文字「255」,也就是三個字元,對應的位元組是 32 35 35。請根據你的資料選擇合適的工具。
可以轉換帶小數的數字嗎?

不可以,本工具只處理整數。像 0.1 這樣的小數在其他進制中往往無法精確表示,因此不在支援範圍內。