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

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

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

https://static.codepen.io/assets/embed/ei.js
 


 

十進制的轉換

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

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

 
 

指數加權法

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

餘數乘積法

餘數乘積法,用於將 十進制 轉換為 其他進制,透過:
 
一、分離 『整數』、『小數』部分。
 
二、『整數』部分:
不斷除以 目標進制基底,直到商數為 0,並 反向 取出『餘數』。
 
三、『小數』部分:
每次將目前的小數部分乘以目標進制基底,正向記錄乘積的整數部分,並以乘積的小數部分繼續。小數部分為 0 時可停止;若無法歸零,則依所需精度停止並標示為近似值。
 
四、最後,將兩者合併!
 
 

以 87.12510 轉換為 二進制為例:

1. 首先,將整數、小數分離,可分別得到 87、0.125:
 
dec-to-binary-ex
 
 
2. 『整數』部分:
不斷除以 目標進制基底 2,直到商數為 0,並 反向 取出『餘數』,
得到 『 1 0 1 0 1 1 1 』:
dec-to-binary-ex2
 
 
3. 『小數』部分:
不斷將小數部分乘以目標進制基底,記錄乘積整數部分,再以乘積小數部分繼續;直到小數部分為 0。
 
步驟:
0.125 × 2 = 0.25,記錄整數部分 0,保留小數部分 0.25。
0.25 × 2 = 0.5,記錄整數部分 0,保留小數部分 0.5。
0.5 × 2 = 1.0,記錄整數部分 1,小數部分為 0,完成。
 
正向取出 『乘積』整數部分,
得到『 0 0 1 』:
dec-to-binary-ex3
 
 
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. 根據分組查表。
 
進制轉換表:

Positional-Numeral-Systems-Conversion
(點擊查看)
 
 

以 1010111.0012 轉換為 八進制為例:

1. 欲轉為 八進制時 3 個 bit 為一組。
 
2.『整數』部分: 由右往左 (←) 分組,不足補 0 ;
小數』部分: 由左往右 (→) 分組,不足補 0。
 
binary-to-oct1
 
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。
 
binary-to-hex
 
3. 根據分組查表:
『 0101 』2 = 516
『 0111 』2 = 716
.
『 0010 』2 = 216
 
1010111.0012 = 57.216 !
 
 

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

不過是反向的查表!
 

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

hex-to-binary
 
 

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

在〈進制轉換 (二進制、八進制、十進制、十六進制)〉中有 13 則留言

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

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

  3. 自動引用通知: 简述二进制 - 算法网
  4. 你好,你介紹推薦計買算概論考古題哪裡?電腦打字的!急了

發表迴響