計算機組織/概論

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

數字系統 (Numeral System) —— 進制 簡介 一文中,簡單的介紹了 進制 的概念,
進制的轉換、負數與運算,
讓我們能使用熟悉的 十進制 (Decimal) 或 十六進制 (Hex)…,
而不用背長串的 『10010100001111…』,
更有利於我們了解計算機組織、組合語言…,並增進程式效率😆
 


 

十進制的轉換

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

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

 
 

指數加權法

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

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

 
 

餘數乘積法

餘數乘積法,用於將 十進制 轉換為 其他進制,
透過:

  1. 分離 『整數』、『小數』部分
  2. 整數』部分:
    不斷除以 目標進制基底,直到商數為 0,
    反向取出 『餘數
  3. 小數』部分:
    不斷乘以 「目標進制基底,取出乘積小數部分」,
    直到乘積小數部分為 0,
    正向取出 『乘積』整數部分
  4. 最後,將兩者合併!

 
 

以 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 轉換為 十六進制為例:


 
 

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

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

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

發表迴響