More Related Content
Similar to 【智慧核心-CPU】第二節:正整數進位制的轉換-編碼 (6)
More from Chen-Hung Hu (11)
【智慧核心-CPU】第二節:正整數進位制的轉換-編碼
- 1. 第二節:正整數進位制的轉換-編碼
既然數字系統龐大又複雜,怎麼設計運算單元來處理這些數字呢?在數位邏
輯中,第一步是二進位化-將每一種數字化為 0 或 1 的二進位數值。註 1 前面提
到所有分數都將化為小數,故在此討論中不會出現「分數」。舉例來說,抓個簡
單的整數數字,如「5」,二進位化後寫成「0101(2)」註 2 過程如下:
2| 5
2| 2 -----1↑
1------------0↑
→→→→→→ (箭頭方向由高位元依序至低位元)
透過連續除法取出餘數,即可轉換數值至特定基底。
可以簡述為 5(10)= 0101(2),以下標代表基底(基底為 10 可省略)。
※在二進位系統中,一個數字的最高位元稱為 MSB(Most Significant Bit,最高有
效位元);最低位元稱為 LSB(Least Significant Bit,最低有效位元)。如「0101(2)」
這個二進位數的 MSB 為 0;LSB 為 1。
※在十進位系統中,一個數字的最高位數稱為 MSD(Most Significant Digital,最
高有效位數);最低位數稱為 LSD(Least Significant Digital,最低有效位數)。如
「23145」的 MSD 為 2;LSD 為 5。
※二進位數值的「基底」為 2,每一位數皆由 2 的次方加權組成,表示如下:
純文字:5=0101(2)=0×8(2 的 3 次方)+1×4(2 的 2 次方)+0×2(2 的 1 次方)+1×1(2 的
0 次方)
Word 方程式工具:5 = 0 × 23
+ 1 × 22
+ 0 × 21
+ 1 × 20
這就相當於十進位數字(基底為 10)57436=5×10000(10 的 4 次方)+7×1000(10 的 3
次方)+4×100(10 的 2 次方)+3×10(10 的 1 次方)+6×1(10 的 0 次方)。
Q:為啥高低位元的排序(箭頭方向)是由下到上呢?
A:數字的位元愈高,所代表權值越大,需要連續除較多次才能取得。例如一個
十進位數 57436,如果用同樣的方法做十進位化(數字本身即為十進位數,在此僅
用於說明轉換方式的權值關係)
10| 57436
10| 5743 -----6↑(低位元)
10| 574 -----3↑
10| 57 -----4↑
5 -----7↑
(高位元)→→→→
同樣的方法亦可用於十進位制轉換至不同進位制,舉例如下:
十進位至八進制(基底為 8):
8| 57436
8| 7179 -----4↑(低位元)
- 2. 8| 897 -----3↑
8| 112 -----1↑
8| 14 -----0↑
1 -----6↑
(高位元)→→→→
57436=0160134(8)
十進位至十六進制:
16| 57436
16| 3589 -----C↑(低位元)
16| 224 -----5↑
E -----0↑
(高位元)→→→→
57436=E05C(16)
※十六進制系統每位數可能為 0~15,其中大於 9 的數值皆依序以英文字母 A~F
表示。10 記為 A,11 記為 B,12 記為 C,13 記為 D,14 記為 E,15 記為 F。
十進位至五進位:
5| 57436
5| 11487 -----1↑(低位元)
5| 2297 -----2↑
5| 459 -----2↑
5| 91 -----4↑
5| 18 -----1↑
3 ------3↑
(高位元)→→→→
57436=3314221(5)
同樣的,我們可以將特定基底的數值轉換至十進位數,過程如下,首先以二進位
數值為例。
0101(2)=0×8(2 的 3 次方)+1×4(2 的 2 次方)+0×2(2 的 1 次方)+1×1(2 的 0 次方)=5
01101110(2)=64(2 的 6 次方)+ 32(2 的 5 次方)+ 8(2 的 3 次方)+ 4(2 的 2 次方)+ 2(2
的 1 次方)=110
八進制至十進制:
0160134(8)= 0×262144(8 的 6 次方)+1×32768(8 的 5 次方) +6×4096(8 的 4 次方)
+0×512(8 的 3 次方) +1×64(8 的 2 次方) +3×8(8 的 1 次方) +4×1(8 的 0 次方)=
57436
3421(8)= 3×512(8 的 3 次方) +4×64(8 的 2 次方) +2×8(8 的 1 次方) +1×1(8 的 0
次方)=1809
十六進制至十進制:
- 3. E05C(16)= E(14) ×4096(16 的 3 次方) +0×256(16 的 2 次方) +5×16(16 的 1 次方)
+C(12)×1(16 的 0 次方)=57436
ABD(16)=A(10)×256(16 的 2 次方) +B(11)×16(16 的 1 次方) +D(13)×1(16 的 0 次
方)=2479
五進制至十進制:
3314221(5) =3×15625(5 的 6 次方) +3×3125(5 的 5 次方) +1×625(5 的 4 次方)
+4×125(5 的 3 次方) +2×25(5 的 2 次方) +2×5(5 的 1 次方) +1×1(5 的 0 次
方)=57436
412(5) =4×25(5 的 2 次方) +1×5(5 的 1 次方) +2×1(5 的 0 次方)=107
最後,我們以表格整理一下:
十進位數 二進位數 八進位數 十六進位數 五進位數
0 0000 0 0 0
1 0001 1 1 1
2 0010 2 2 2
3 0011 3 3 3
4 0100 4 4 4
5 0101 5 5 10
6 0110 6 6 11
7 0111 7 7 12
8 1000 10 8 13
9 1001 11 9 14
10 1010 12 A 20
11 1011 13 B 21
12 1100 14 C 22
13 1101 15 D 23
14 1110 16 E 24
15 1111 17 F 30
下一章將以此表格,繼續探討負數、小數的編碼原理。
※附錄:二進制、八進制與十六進制的快速轉換法:
先列表觀察二進制與八進制的數值變化如下
二進制數值 八進制數值
00 000 000 0
00 000 001 1
00 000 010 2
(略) (略)
00 000 110 6
- 4. 00 000 111 7
00 001 000 10
00 001 001 11
00 001 010 12
(略) (略)
00 111 110 76
00 111 111 77
01 000 000 100
01 000 001 101
(略) (略)
由於二進位數中 2 的三次方即為 8,故 7→8 時二進位數進位了,八進位數亦進
位了。由歸納可知,若將二進位數從低位元開始每三位數一組,即可對應一八進
位數,藉此方法可快速互換二進位與八進位數。
再列表觀察二進制與十六進制的數值變化如下
二進制數值 十六進制數值
0000 0000 0000 0
0000 0000 0001 1
0000 0000 0010 2
(略) (略)
0000 0000 1110 E
0000 0000 1111 F
0000 0001 0000 10
0000 0001 0001 11
(略) (略)
0000 1111 1110 FE
0000 1111 1111 FF
0001 0000 0000 100
0001 0000 0001 101
(略) (略)
由於二進位數中 2 的四次方即為 16,故 15→16 時二進位數進位了,十六進位數
亦進位了。由歸納可知,若將二進位數從低位元開始每四位數一組,即可對應一
十六進位數,藉此方法可快速互換二進位與十六進位數。
而八進制與十六進制互換則可運用上述特性,藉由二進制做為橋梁,進行快速轉
換。
<延伸思考>
二進位數除了可快速轉換至八進位數、十六進位數,是否亦可快速轉換至四進位
數、三十二進位數呢?原因是什麼?