二、八、十與十六進位 (數字系統) 轉換教學
電腦內部資料都是使用 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 |
小數第二位數 1
1 / 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 → 11
11 / 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 → 11
11 / 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 → 1212 / 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) |
先轉換為二進位 整數第二位 33 / 2 = 1 餘數 1 ↑ => 011(2)
1 / 2 = 0 餘數 1 |
整數第一位 6
6 / 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。
這樣呈現方式應該會更易看懂:
請問一下,二進位(11011011)轉成八進位為什麼是(333)? 不是應該是(666)嗎?
是 333 沒錯!
您可用 Windows 小算盤 > 檢視 > 程式設計師,功能去驗證。
謝謝你~
不客氣~
讚啦