二、八、十與十六進位 (數字系統) 轉換教學
 
                    電腦內部資料都是使用 0 與 1 來儲存的,這種只有 0 與 1 兩種狀態的系統,相當於二進位 (數字系統)。人類最常用的為十進位 (因為人類具有十根手指而產生的),也是目前最常用的系統。文章會說明目前較常使用的二、八、十與十六進位,及進位間轉換的計算方式教學。
進位 (數字系統)
概念
二進位 (Binary,bin)
- 基數為 2 的系統:逢 2 進位。
- 數字符號:0, 1。
八進位 (Octal,oct)
- 基數 8 的系統:逢 8 進位。
- 數字符號:0, 1, 2, 3, 4, 5, 6, 7。
十進位 (Decimal,dec)
- 基數 10 的系統:逢 10 進位。
- 數字符號:0, 1, 2, 3, 4, 5, 6, 7, 8, 9。
十六進位 (Hexadecimal,hex)
- 基數 16 的系統:逢 16 進位。
- 數字符號:0, 1, 2, 3, 4, 5, 6, 7, 8, 9 與 10 → A, 11 → B, 12 → C, 13 → D, 14 → E, 15 → F。
對照表
| 十進位 | 二進位 | 八進位 | 十六進位 | 
|---|---|---|---|
| 0 | 0000 | 0 | 0 | 
| 1 | 0001 | 1 | 1 | 
| 2 | 0010 | 2 | 2 | 
| 3 | 0011 | 3 | 3 | 
| 4 | 0100 | 4 | 4 | 
| 5 | 0101 | 5 | 5 | 
| 6 | 0110 | 6 | 6 | 
| 7 | 0111 | 7 | 7 | 
| 8 | 1000 | 10 | 8 | 
| 9 | 1001 | 11 | 9 | 
| 10 | 1010 | 12 | A | 
| 11 | 1011 | 13 | B | 
| 12 | 1100 | 14 | C | 
| 13 | 1101 | 15 | D | 
| 14 | 1110 | 16 | E | 
| 15 | 1111 | 17 | F | 
有效位
- 最高有效位 (MSB):表示最左邊的位元 → 1010。
- 最低有效位 (LSB):表示最右邊的位元 → 1010。
進位 (數字系統) 轉換規則
十進位轉換成其他進位
整數 → 除法:
- 【十進位 (整數) / 欲轉換進位數】一直除到商數為 0,再依序【由下往上】取出餘數。
小數 → 乘法:
- 【十進位 (小數) * 欲轉換進位數】一直乘到小數為 0,再依序【由上往下】取出整數。
其他進位轉換成十進位
 以二進位為例:1101.101(2)。 
整數 → 乘法:
- 以小數點為中心【由右至左】累加次方,在依【數字 * 原本進位數次方】。
- 1101 → 13 12 01 10 → (1 * 23) + (1 * 22) + (0 * 21) + (1 * 20)。
小數 → 乘法:
- 以小數點為中心【由左至右】累加負次方,在依【數字 * 原本進位數負次方】。
- .101 → 1-1 0-2 1-3 → (1 * 2-1) + (0 * 2-2) + (1 * 2-3)。
次方計算常見問題
- 0 * 2 = 0,0 * 任何數都等於 0。
- 20 = 1,任何底數的 0 次方都等於 1。
- 22 = 2 * 2,多少次方則依此類推。
- 2-2 = 1 / (2 * 2) = 0.25,多少次方則依此類推。
進位 (數字系統) 轉換
二進位與十進位的轉換
十進位 → 二進位
| 範例 | 計算公式 | 
|---|---|
| 12(10) = 1100(2) | 12 / 2 = 6 餘數 0 ↑ => 1100(2) 6 / 2 = 3 餘數 0 | 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 | | 
| 15.625(10) = 1111.101(2) | 整數部份 15 / 2 = 7 餘數 1 ↑ => 1111(2) 7 / 2 = 3 餘數 1 | 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 |小數部份 0.625 * 2 = 1.250 取整數 1 | 0.250 * 2 = 0.500 取整數 0 | 0.500 * 2 = 1.000 取整數 1 ↓ => 101(2) | 
二進位 → 十進位
| 範例 | 計算公式 | 
|---|---|
| 101(2) = 5(10) | (1 * 22) + (0 * 21) + (1 * 20) = 5(10) | 
| 1101.101(2) = 13.625(10) | 整數部份 (1 * 23) + (1 * 22) + (0 * 21) + (1 * 20) = 13(10)小數部份(1 * 2-1) + (0 * 2-2) + (1 * 2-3) = 0.625(10) | 
八進位與十進位的轉換
十進位 → 八進位
| 範例 | 計算公式 | 
|---|---|
| 395(10) = 613(8) | 395 / 8 = 49 餘數 3 ↑ => 613(8) 49 / 8 = 6 餘數 1 | 6 / 8 = 0 餘數 6 | | 
| 17.25(10) = 21.2(8) | 整數部份 17 / 8 = 2 餘數 1 ↑ => 21(8) 2 / 8 = 0 餘數 2 |小數部份 0.25 * 8 = 2.00 取整數 2 ↓ => 0.2(8) | 
八進位 → 十進位
| 範例 | 計算公式 | 
|---|---|
| 26(8) = 22(10) | (2 * 81) + (6 * 80) = 22(10) | 
| 162.4(8) = 114.5(10) | 整數部份 (1 * 82) + (6 * 81) + (2 * 80) = 114(10)小數部份 (4 * 8-1) = 0.5(10) | 
十六進位與十進位的轉換
十進位 → 十六進位
| 範例 | 計算公式 | 
|---|---|
| 2748(10) = ABC(16) | 2748 / 16 = 171 餘數 12 ↑ => ABC(16) 171 / 16 = 10 餘數 11 | 10 / 16 = 0 餘數 10 | | 
| 799.375(10)= 31F.6(16) | 整數部份 799 / 16 = 49 餘數 15 ↑ => 31F(16) 49 / 16 = 3 餘數 1 | 3 / 16 = 0 餘數 3 |小數部份 0.375 * 16 = 6.000 ↓ => 0.6(16) | 
十六進位 → 十進位
| 範例 | 計算公式 | 
|---|---|
| 4EB(16) = 1259(10) | (4 * 162) + (14 * 161) + (11 * 160) = 1259(10) | 
| B2.5(16) = 178.3125(10) | 整數部份 (11 * 161) + (2 * 160) = 178(10)小數部份 (5 * 16-1) = 0.3125(10) | 
八進位與二進位的轉換
8 = 23 所以八進位能以 3 個位數的二進位表示,將每一個八進位數字都轉成二進位數字。
八進位 → 二進位
- 計算結果不足 3 個位數則【前面】補 0。
| 範例 | 計算公式 | 
|---|---|
| 7 6 . 2 1 (8) = 111 110 . 010 001 (2) | 整數第二位數 7 7 / 2 = 3 餘數 1 ↑ => 111(2) 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 |整數第一位數 6 6 / 2 = 3 餘數 0 ↑ => 110(2) 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 |小數第一位數 2 2 / 2 = 1 餘數 0 ↑ => 010(2)
1 / 2 = 0 餘數 1 |
小數第二位數 11 / 2 = 0 餘數 1 ↑ => 001(2)
 | 
二進位 → 八進位
- 以小數點為基準,分向左【整數】右【小數】兩邊,每 3 個位數為一組。
- 【整數】不足 3 個位數則【前面】補 0。
- 【小數】不足 3 個位數則【後面】補 0。
| 範例 | 計算公式 | 
|---|---|
| 101 001 110 . 01 (2) = 516.2(8) | 整數左側三位數 101 (1 * 22) + (0 * 21) + (1 * 20) = 5(8)整數中間三位數 001(0 * 22) + (0 * 21) + (1 * 20) = 1(8)整數右側三位數 110(1 * 22) + (1 * 21) + (0 * 20) = 6(8)小數三位數 010(0 * 22) + (1 * 21) + (0 * 20) = 2(8) | 
十六進位與二進位的轉換
16 = 24 所以十六進位可以 4 個位數的二進位表示,將每一個十六進位數字都轉成二進位數字。
十六進位 → 二進位
計算結果不足 4 個位數則【前面】補 0。
| 範例 | 計算公式 | 
|---|---|
| 5 B D 1 . B (16) = 0101 1011 1101 0001 . 1011 (2) | 整數第四位數 5  5 / 2 = 2 餘數 1 ↑ => 0101(2)
 2 / 2 = 1 餘數 0 |
 1 / 2 = 0 餘數 1 |
整數第三位數 B → 1111 / 2 = 5 餘數 1 ↑ => 1011(2) 5 / 2 = 2 餘數 1 | 2 / 2 = 1 餘數 0 | 1 / 2 = 0 餘數 1 |整數第二位數 D → 13 13 / 2 = 6 餘數 1 ↑ => 1101(2) 6 / 2 = 3 餘數 0 | 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 |整數第一位數 1  1 / 2 = 0 餘數 1 ↑ => 0001(2)
小數第一位數 B → 1111 / 2 = 5 餘數 1 ↑ => 1011(2) 5 / 2 = 2 餘數 1 | 2 / 2 = 1 餘數 0 | 1 / 2 = 0 餘數 1 | | 
二進位 → 十六進位
- 以小數點為基準,分向左【整數】右【小數】兩邊,4 個位數為一組。
- 【整數】不足 4 個位數則【前面】補 0。
- 【小數】不足 4 個位數則【後面】補 0。
| 範例 | 計算公式 | 
|---|---|
| 1 1101 0011 . 101 (2) = 1D3.A(16) | 整數左側四個位數 0001 (1 * 20) = 1(16)整數中間四個位數 1101 (1 * 23) + (1 * 22) + (0 * 21) + (1 * 20) = 13 → D(16)整數右側四個位數 0011(0 * 23) + (0 * 22) + (1 * 21) + (1 * 20) = 3(16)小數三個位數 1010(1 * 23) + (0 * 22) + (1 * 21) + (0 * 20) = 10 → A(16) | 
十六進位與八進位的轉換
必須經過 2 次轉換:
- 八與十六進位都先轉換為二進位。
- 再轉換為八或十六進位。
十六進位 → 八進位
| 範例 | 計算公式 | 
|---|---|
| C 9 . A (16) = 11001001.101(2) 11 001 001 . 101 (2) = 311.5(8) | 先轉換為二進位整數第二位 C → 12 12 / 2 = 6 餘數 0 ↑ => 1100(2) 6 / 2 = 3 餘數 0 | 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 |整數第一位 9 9 / 2 = 4 餘數 1 ↑ => 1001(2) 4 / 2 = 2 餘數 0 | 2 / 2 = 1 餘數 0 | 1 / 2 = 0 餘數 1 |小數第一位 A → 10 10 / 2 = 5 餘數 0 ↑ => 1010(2)
 5 / 2 = 2 餘數 1 |
 2 / 2 = 1 餘數 0 |
 1 / 2 = 0 餘數 1 |
 | 
| 再轉換為八進位 (3 個位數為一組)整數左側三位數 011 (0 * 22) + (1 * 21) + (1 * 20) = 3(8)整數中間三位數 001(0 * 22) + (0 * 21) + (1 * 20) = 1(8)整數右側三位數 001(0 * 22) + (0 * 21) + (1 * 20) = 1(8)小數三位數 101(1 * 22) + (0 * 21) + (1 * 20) = 5(8) | 
八進位 → 十六進位
| 範例 | 計算公式 | 
|---|---|
| 3 6 . 6 5 (8) = 11110.110101(2) 1 1110 . 1101 01 (2) = 1E.D4(16) | 先轉換為二進位整數第二位 3 3 / 2 = 1 餘數 1 ↑ => 011(2)
1 / 2 = 0 餘數 1 |
整數第一位 66 / 2 = 3 餘數 0 ↑ => 110(2) 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 |小數第一位 6 6 / 2 = 3 餘數 0 ↑ => 110(2) 3 / 2 = 1 餘數 1 | 1 / 2 = 0 餘數 1 |小數第二位 5 5 / 2 = 2 餘數 1 ↑ => 101(2) 2 / 2 = 1 餘數 0 | 1 / 2 = 0 餘數 1 | | 
| 再轉換為十六進位 (4 個位數為一組)整數左側四位數 0001 (0 * 23) + (0 * 22) + (0 * 21) + (1 * 20) = 1(16)整數右側四位數 1110(1 * 23) + (1 * 22) + (1 * 21) + (0 * 20) = 14 → E(16)小數左側四位數 1101(1 * 23) + (1 * 22) + (0 * 21) + (1 * 20) = 13 → D(16)小數右側四位數 0100(0 * 23) + (1 * 22) + (0 * 21) + (0 * 20) = 4(16) | 
參考
 
                            本著作係採用創用 CC 姓名標示-相同方式分享 3.0 台灣 授權條款授權.
 
                                    
                                
B2.5是178.3125 不是178.03125 上面你寫錯了 而且有些地方沒把位數補齊
感謝您的糾正,已修正反應問題。
八進位(Octal,oct)
基數 8 的系統,逢 8 進位
數字符號:0, 1, 2, 3, 4, 5, 6, 7, 8
上面的「數字符號」寫錯了,沒有8
已修正…非常感謝您的指正,謝謝。
您好,請問能用您網上提供的教學做私人整理與討論應用嗎?
完全沒問題的,請盡管使用。
請問一下有小數的十進位換算16進位是如何算的 判定小數點第一位>6就停止嗎
您提的這兩個問題,在文章的“進位(數字系統)轉換規則 > 十進位轉換成其他進位 > 小數 → 乘法”都有說明,如仍有不理解之處再詢問。
非常感謝您提供這麼詳盡的文章!
有個問題請教:
在文末十六進位轉八進位的部份,從十六進位先轉為二進位那得的結果,是否應為11001001.1010(2)呢?是的話,其後再轉為八進位所得的數字(311.5),也應隨之修改?
謝謝!
是 11001001.1010(2) 沒錯,但因為最後的零不會影響最終的運算結果,因此可以直接省略。
看起來很複雜,抓到訣竅就變有趣了!
本來看參考書看不懂,謝謝Jacky寫的淺顯易懂,讓我了解計算過程
您好
其他進位轉換成十進位中,"欲轉換進位數" 應改成 "原本進位數",才是對的?
非常感謝您的指正,已修正。
謝謝!
請問可以轉載至我的網站?我會註明來源
沒問題,感謝。
您好,請問如果是像102.124十進位轉二進位也是相同的原理嗎?我一直搞不懂0.124小數那邊是要*2乘幾次......
原理都是相同的,但有些部份文章未說明到,您的疑問解答如下:
[針對小數點] 二、八、十六進位 → 十進位:通常會有固定答案。
[針對小數點] 十進位 → 二、八、十六進位:有時候未必能在有限位數內得到答案,應該會是有限小數或最後變成循環小數(無限循環)。
像 0.3 就一定會是循環小數。
好的,我明白了,謝謝您~
除完等於零怎換算,例如280算到都整除2進位,八進位16進位,餘數為零怎麼寫快考試啦,之前一直發燒還尋麻疹,好多啦,救人哦,早安
1. 280 是十進位嗎?如果是的話,二進位 = 100011000、八進位 = 430、十進位 = 118
2. 有依文章教學自行試算驗證嗎?應該不會有什麼問題,請用心看完。
3. 如需驗證換算是否正確,可使用 進位換算計算機Dec.Bin.Oct.Hex|計算Pro 或 Windows 系統內建的「小算盤」切換到程式設計人員模式。
PS:多試算幾次就學的會了,真的不難。
2位數第一層餘八?第三層餘零。八位數第一層餘四第二層餘零不懂。吃藥醫師說還有感冒用程式算對阿不過考試要手算啊?沒有餘1?不懂耶?八位數沒於三啊?都餘零感冒吃要來了
十進位轉換二進位只會餘 0 or 1,不可能餘 8。
您本身數學計算可能就有問題了。
PS:請清楚表達您的問題,2 位數 = 2 進位? 您是十進位 280 轉換成其它進位嗎?
八進位餘數怎算呢?還有十六進位餘數?餘數取一位就好了喔!感恩!
您可以對照《計算公式》的計算流程。
感謝腳印哥,
文組自學超困,終於找到一篇講解清楚還附各種換算及範例的好文 🙂
很高興能對您有幫助。
十進位換二進位的0.25*2=0.5取整數不是1嗎?
0.5 取整數 (也就是小數點的左邊數值) 是 0 沒錯。
10進位轉16進位,為什麼除到最後不是11嗎?可是你的答案是10
因為最後的整數 10,16 無法在除了,所以餘數就是 10。
這樣呈現方式應該會更易看懂:
16 │ 2748 12 ↑ └────── | 16 │ 171 11 | └───── | 10 10 |請問一下,二進位(11011011)轉成八進位為什麼是(333)? 不是應該是(666)嗎?
是 333 沒錯!
您可用 Windows 小算盤 > 檢視 > 程式設計師,功能去驗證。
謝謝你~
不客氣~
讚啦