計算機組織/概論

進制轉換 (二進制、八進制、十進制、十六進制)

進制簡介 一文中,簡單的介紹了 進制 的概念,
進制的轉換 讓我們能用熟悉的 十進制 (Decimal) 或 十六進制 (Hex)…,
而不用背長串的 『10010100001111…』,
也有利於我們了解 演算法、計算機組織、組合語言…,以增進程式效率 😆。
 
2018/06/24 新增簡易 進制轉換器

See the Pen Number System Convetor by JS-Zheng (@JS-Zheng) on CodePen.


 


 

十進制的轉換

十進制 (Decimal) 的轉換,只需記得兩招:

  1. 指數加權法其他進制 轉換為 十進制
  2. 餘數乘積法 — 十進制 轉換為 其他進制

 
 

指數加權法

任何數字,皆可藉由 『 數 (d) * 基底 i』的多項式來表達,
例: 十進位 (以 10 為基底) 的 9527 ,
即可表示成: 9 * 103  +  5 * 102  +  2 * 101  +  7 * 100
 
指數加權法,即是利用此概念,
其他進制 轉換為 十進制。
 
「例一」
二進制的 101.112,透過 指數加權法 轉換為 十進制:

 
 
「例二」
十六進制的 1234.56716,透過 指數加權法 轉換為 十進制:

 
 

餘數乘積法

餘數乘積法,用於將 十進制 轉換為 其他進制,透過:
 
一、分離 『整數』、『小數』部分。
 
二、『整數』部分:
不斷除以 目標進制基底,直到商數為 0,並 反向 取出『餘數』。
 
三、『小數』部分:
不斷乘以 「目標進制基底,取出乘積小數部分」,
直到乘積小數部分為 0,並 正向 取出『乘積』整數部分。
 
四、最後,將兩者合併!
 
 

以 87.12510 轉換為 二進制為例:

1. 首先,將整數、小數分離,可分別得到 87、0.125:
 

 
 
2. 『整數』部分:
不斷除以 目標進制基底 2,直到商數為 0,並 反向 取出『餘數』,
得到 『 1 0 1 0 1 1 1 』:

 
 
3. 『小數』部分:
不斷乘以 「目標進制基底,取出乘積小數部分」,直到乘積小數部分為 0。
 
步驟:
乘以 目標進制基底 2,取出乘積小數部分 0.25,
乘以 目標進制基底 2,取出乘積小數部分 0.5,
乘以 目標進制基底 2,取出乘積小數部分 0.0。
 
正向取出 『乘積』整數部分,
得到『 0 0 1 』:

 
 
4. 最後,將兩者合併!
整數部分:『 1 0 1 0 1 1 1 』
小數部分:『 0 0 1 』
87.12510 = ( 1 0 1 0 1 1 1 . 0 0 1)2 !
 


 

二、八、十六進制的轉換

二、八、十六進制之間的轉換非常簡單,
不論是『二 到 十六』還是『十六 到 二』,都可利用 查表法 !
 
 

二進制 轉 八進制、十六進制

1. 欲轉為 八進制時 3 個 bit 為一組 ( 8 = 23),
欲轉為 十六進制時 4 個 bit 為一組 ( 16 = 24 )。
 
2.『整數』部分: 由右往左 (←) 分組,不足補 0 ;
小數』部分: 由左往右 (→) 分組,不足補 0。
 
3. 根據分組查表。
 
進制轉換表:

(點擊查看)
 
 

以 1010111.0012 轉換為 八進制為例:

1. 欲轉為 八進制時 3 個 bit 為一組。
 
2.『整數』部分: 由右往左 (←) 分組,不足補 0 ;
小數』部分: 由左往右 (→) 分組,不足補 0。
 

 
3. 根據分組查表:
『 001 』2 = 18
『 010 』2 = 28
『 111 』2 = 78
.
『 001 』2 = 18
 
1010111.0012 = 127.18 !
 
 

以 1010111.0012 轉換為 十六進制為例:

1. 欲轉為 十六進制時 4 個 bit 為一組。
 
2.『整數』部分: 由右往左 (←) 分組,不足補 0 ;
小數』部分: 由左往右 (→) 分組,不足補 0。
 

 
3. 根據分組查表:
『 0101 』2 = 516
『 0111 』2 = 716
.
『 0010 』2 = 216
 
1010111.0012 = 57.216 !
 
 

八進制、十六進制 轉 二進制

不過是反向的查表!
 

以 85.CC16 轉換為 十六進制為例:


 
 

作者: 鄭中勝
喜愛音樂,但不知為何總在打程式 ? 期許能重新審視、整理自身所學,幫助有需要的人。

在《進制轉換 (二進制、八進制、十進制、十六進制)》中有 11 則留言

  1. 謝謝大大分享的教學
    我覺得這篇很有趣 大大的圖解彷彿讓我憶起小學學數學的感覺

  2. 非常謝謝您在網路上所做的分享,很精闢的教學,讓我在回憶之前所學的內容非常快速~
    想另外請教您,對於想轉職回資訊業有什麼樣的建議嗎?

  3. 自動引用通知: 简述二进制 - 算法网

發表迴響