請選擇原本的進位制,並用該進位制的寫法輸入數值。會一次算出二進位、八進位、十進位、十六進位四種表示法,並顯示計算過程。
這個頁面可以做什麼
- 只要選擇原本的進位制(二進位、八進位、十進位、十六進位)並輸入數值,就能一次知道四種進位制的表示法
- 「十六進位的 2AA 是十進位的多少?」「170 換成二進位是多少?」這類轉換一次就能完成
- 也會顯示位值的展開(每一位數字×位值全部相加),以及除以基數再排列餘數的計算過程,讓您學會轉換的方法本身
- 可以用來學習國中、高中「資訊科技」課程和資訊類證照考試常出的進位制轉換,或對答案
- 公式的淺顯解說,以及可直接複製到 Excel、Google 試算表、Python 的公式,也都整理在這個頁面
這個計算有什麼用?
進位制轉換(基數轉換)是國中、高中「資訊科技」課程,以及各種資訊類證照、程式設計檢定一再出現的經典主題。
「二進位 1010 是十進位的多少」「把十進位 45 用二進位表示」這類題目,正是本頁「位值展開」和「除完排餘數」這兩個步驟本身。一邊看計算過程一邊練習,考試時就不會卡住。
網頁的顏色用「#FF5733」這種十六進位的色碼指定。它是把紅、綠、藍的強度各用 2 位十六進位(00~FF=十進位的 0~255)排在一起,#FF5733 就是紅 FF(255)、綠 57(87)、藍 33(51)。
能在十六進位和十進位之間來回轉換,就能直接用色碼的數值想像「紅色再淡一點」這類顏色調整。
伺服器管理常用的「chmod 755」中的 755 是八進位。八進位的 1 位對應二進位的 3 位,把 755 換成二進位就是 111 101 101——也就是「讀取、寫入、執行」的許可開關,每 3 位元排成一組。
了解進位制的原理之後,就能看懂這個數字不是密碼,而是「位元的開關表」。
網路的地址 IP 位址(例如 192.168.1.1),實際上是每 8 位元分成 4 組的二進位,192 是 11000000,255 是 11111111。
「子網路遮罩 255.255.255.0 表示『前 24 位元是網路部分』」這類網路基礎,要能做十進位和二進位的轉換才會真正理解。這是網路工程師的實務和證照考試(CCNA 等)的基礎知識。
「1 位元組=8 位元,可以表示 0~255(十六進位的 00~FF)」「記憶體位址和錯誤碼會用 0x7FFF 這樣的十六進位顯示」等,學習電腦內部時,二進位和十六進位就是共通語言。
學程式時容易卡住的位元運算、字元編碼、顏色指定等,只要能自由做進位制轉換,就會一下子豁然開朗。
公式
符號與用語解說
符號
| \(b\) | 基數,表示「幾進位」的數,本頁是 2、8、10、16 其中之一。(取自英文 base 的第一個字母) |
| \(d_i\) | 從最右邊數來第 \(i\) 位(最右邊是第 0 位)的數字。十六進位也包含 A~F(十進位的 10~15)。(取自英文 digit 的第一個字母) |
| \(i\) | 位數的位置。最右邊的位是 \(i=0\),每往左一位就增加 1。 |
| \(N\) | 十進位的值。本頁轉換的計算過程一律經過這個十進位。 |
| \(\sum\) | 表示「全部相加」的符號(讀作 sigma)。\(\sum_{i=0}^{k}\) 的意思是「讓 \(i\) 從 0 變到 \(k\),全部相加」。 |
| \(q\) | 除法的商。把十進位換成 \(n\) 進位時,要重複除法直到商為 0。(取自英文 quotient 的第一個字母) |
| \(r\) | 除法的餘數。這些餘數就是 \(n\) 進位的各位(從低位開始依序)。(取自英文 remainder 的第一個字母) |
| \(2\mathrm{AA}_{(16)}\) | 數字右下角的小字 \((16)\),意思是「這個數是用十六進位寫的」。同樣地,\(1010_{(2)}\) 表示二進位。這是在容易搞混是幾進位時使用的寫法。 |
用語
| 進位制 (基數) |
數數時「每幾個就進一位」的規則。平常的數是每 10 個進一位的十進位,電腦內部則是每 2 個進一位的二進位。進一位的那個數(2、8、10、16 等)稱為基數。 |
| 位值記數法 | 依每個位數的位置決定位值來表示數的方法。和十進位的 682 表示 \(6 \times 100 + 8 \times 10 + 2 \times 1\) 是相同的原理,二進位、八進位、十六進位的位值則分別是 2、8、16 的次方。 |
| 二進位 | 只用 0 和 1 兩種數字表示數的寫法。電腦用電的開、關來處理資訊,所以內部的計算全都用二進位進行。 |
| 八進位 | 用 0~7 八種數字表示數的寫法。二進位的 3 位對應八進位的 1 位,Linux 檔案權限的「755」等就是用八進位。 |
| 十六進位 | 用 0~9 和 A~F(A 是 10、B 是 11、…、F 是 15)十六種字元表示數的寫法。二進位的 4 位對應 1 位,所以程式設計中廣泛用來簡短地寫出很長的二進位。 |
| 位元 | 二進位的 1 位(bit),是電腦處理資訊的最小單位,值是 0 或 1 其中之一。 |
| 半位元組 | 把 4 個位元組合起來的單位(nibble,=十六進位的 1 位)。2 個就是 1 位元組。 |
| 位元組 | 把 8 個位元組合起來的單位(byte,=十六進位的 2 位)。像「1 位元組=到 FF 為止的 256 種」這樣,位元組和十六進位是很搭的單位。 |
建議先了解的基礎知識
為了能「真正理解意義」地使用這個頁面的計算,這裡整理了建議事先了解的基礎知識。
| 十進位的位值(國小) |
|
| 除法與餘數(國小三~四年級,8~10 歲) |
|
| 指數(國中一年級,12~13 歲) |
|
| n 進位(國中、高中「資訊科技」) |
|
用 Excel 計算的方法
| 十進位的值 | 170 |
| 二進位 | =DEC2BIN(B1) |
| 八進位 | =DEC2OCT(B1) |
| 十六進位 | =DEC2HEX(B1) |
| 二進位 | 10101010 |
| 十進位 | =BIN2DEC(B1) |
| 十六進位 | 2AA |
| 十進位 | =HEX2DEC(B1) |
| 十進位的值 | 1500 |
| 十六進位(BASE) | =BASE(B1,16) |
| 由十六進位換回十進位(DECIMAL) | =DECIMAL(B2,16) |
注意:這些函數有位數的限制。DEC2BIN 只能轉換 −512~511(結果在二進位 10 位以內),DEC2OCT 是 −536,870,912~536,870,911,DEC2HEX 是 −549,755,813,888~549,755,813,887。反方向的 BIN2DEC、OCT2DEC、HEX2DEC 輸入也最多 10 位,超過 10 位會出現錯誤;剛好 10 位且最高位的位元是 1(十六進位則是第一位為 8~F)時,會被當成負數(2 的補數)處理。
超過限制的大數,請使用第 4 個表格的 BASE 函數(十進位 → n 進位)和 DECIMAL 函數(n 進位 → 十進位)(Excel 2013 以後。可以處理到約 9 千兆=2 的 53 次方 −1)。
用 Google 試算表計算的方法
| 十進位的值 | 170 |
| 二進位 | =DEC2BIN(B1) |
| 八進位 | =DEC2OCT(B1) |
| 十六進位 | =DEC2HEX(B1) |
| 二進位 | 10101010 |
| 十進位 | =BIN2DEC(B1) |
| 十六進位 | 2AA |
| 十進位 | =HEX2DEC(B1) |
| 十進位的值 | 1500 |
| 十六進位(BASE) | =BASE(B1,16) |
| 由十六進位換回十進位(DECIMAL) | =DECIMAL(B2,16) |
DEC2BIN 只到 −512~511 等位數限制也和 Excel 相同。超過限制的大數請使用 BASE 函數和 DECIMAL 函數。
用 Python 計算的方法
number = "2AA" # 要轉換的數值(用原本進位制的寫法)
from_base = 16 # 原本的進位制(2, 8, 10, 16)
value = int(number, from_base) # 先換成十進位(整數)
binary = format(value, "b") # 二進位
octal = format(value, "o") # 八進位
hexadecimal = format(value, "X") # 十六進位(大寫)
print(f"十進位:{value}")
print(f"二進位:{binary}")
print(f"八進位:{octal}")
print(f"十六進位:{hexadecimal}")
用 LaTeX 等數學式語言的寫法(可直接複製)
N = Σ dᵢ × bⁱ
N = \sum_{i=0}^{k} d_i \times b^{i}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<munderover>
<mo>∑</mo>
<mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow>
<mi>k</mi>
</munderover>
<msub><mi>d</mi><mi>i</mi></msub>
<mo>×</mo>
<msup><mi>b</mi><mi>i</mi></msup>
</mrow>
</math>
N = sum_(i=0)^k d_i * b^i
FromDigits[{2, 10, 10}, 16]
N := add(d[i]*b^i, i = 0 .. k);
N = polyval(d, b);
N = ∑_(i=0)^k d_i × b^i
N = b × q + r (0 ≤ r < b)
N = b \times q + r \quad (0 \le r < b)
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<mi>b</mi>
<mo>×</mo>
<mi>q</mi>
<mo>+</mo>
<mi>r</mi>
</mrow>
</math>
N = b q + r, \ 0 <= r < b
QuotientRemainder[682, 16]
q := iquo(n, b); r := irem(n, b);
q = floor(n/b); r = mod(n, b);
N = b × q + r (0 ≤ r < b)
h = b₃×2³ + b₂×2² + b₁×2¹ + b₀×2⁰
h = b_3 \times 2^3 + b_2 \times 2^2 + b_1 \times 2^1 + b_0 \times 2^0
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>h</mi>
<mo>=</mo>
<msub><mi>b</mi><mn>3</mn></msub><mo>×</mo><msup><mn>2</mn><mn>3</mn></msup>
<mo>+</mo>
<msub><mi>b</mi><mn>2</mn></msub><mo>×</mo><msup><mn>2</mn><mn>2</mn></msup>
<mo>+</mo>
<msub><mi>b</mi><mn>1</mn></msub><mo>×</mo><msup><mn>2</mn><mn>1</mn></msup>
<mo>+</mo>
<msub><mi>b</mi><mn>0</mn></msub><mo>×</mo><msup><mn>2</mn><mn>0</mn></msup>
</mrow>
</math>
h = b_3*2^3 + b_2*2^2 + b_1*2 + b_0
FromDigits[{b3, b2, b1, b0}, 2]
h := 8*b3 + 4*b2 + 2*b1 + b0;
h = 8*b3 + 4*b2 + 2*b1 + b0;
h = b_3 × 2^3 + b_2 × 2^2 + b_1 × 2^1 + b_0 × 2^0
請 ChatGPT 幫忙計算的方法
你是進位轉換的計算助理。請務必實際執行 Python 程式碼來進行下面的計算,並只以執行結果的數值作為回答的依據(不要用心算或推測回答)。 請把十六進位的 2AA 轉換成下列三種進位制。 1. 十進位 2. 二進位 3. 八進位 另外,十六進位轉十進位的部分,也請列出每一位數字×位值(16 的次方)的展開式。 請列出計算所用的程式碼,以及執行結果的數值。
使用方法
-
1輸入數值在輸入欄中輸入要計算的數值
-
2計算按下「計算」按鈕
-
3查看結果計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
DataChef 的特色
不需專業知識,操作直覺又簡單
無須登錄任何個人資料
按下「下載」後自動刪除檔案
無須標註來源出處
亦無須事先取得商用授權