SPOTLIGHT 數字系統與編碼系統 1
相信大家都已經知道,電腦是透過0與1的位元 (bit) 來處理資 料的數位電子裝置。人類社會所使用的數字系統 (number system) ,或稱為數值系統,是早在文明還未進化的時代就已經 因為十根手指頭的關係而採用了十進制至今。 068 2
不同的數字系統:時間、重量、長度 因此以星期來看,可以算是七進制 ( 雖然沒有星期零 ) ,以天來 看,就是廿四進制,以小時和分鐘來看就是六十進制。 3
069 不同的數字系統:時間、重量、長度 資訊世界的數字系統:二進制、八進制、十六進制 為了要讓電腦環境裡的二進制數字,能方便習慣於十進制的人 們處理、記憶,因此數學界透過了八進制 (octal system) 和十六 進制 (hexadecimal system) 來表示電腦裡的各種數字。畢竟, 要讓一般人記住或閱讀由0與1組成的一長串資料,實在是相 當困難。 4
069 不同的數字系統:時間、重量、長度 資訊世界的數字系統:二進制、八進制、十六進制 ( 續 ) 因為二進制若以 3 個位元來算時,是 000 到 111 之間,在數量上 一共是 8 個,而若以 4 位元來算,就是 0000 到 1111 之間,為什 麼電腦裡的二進制系統要轉換成八進制或十六進制,而不挑七 或十三的其他進制來轉換呢?在數量上則是 16 個。因此,才會 以八進制和十六進制來處理。 5
069 不同的數字系統:時間、重量、長度 資訊世界的數字系統:二進制、八進制、十六進制 ( 續 ) 6
069 不同的數字系統:時間、重量、長度 進制轉換 雖然我們的日常生活裡不太會用到八進制與十六進制,但如果 在處理電腦的計算時,要將八進制或十六進制轉換成二進制, 一般在數學上都會先將數字轉換成十進制,不僅如此,若要將 二進制的數字轉換成八進制或十六進制,也是要先轉換成十進 制。十進制是人類最為熟悉的數字系統。另外,為了避免在標 示時搞不清楚所使用的是幾進制,要是想特別指明數字的進制 時,會以括號把該數字框住,並且在後方加上小字的數字,如 十進制的 365 則為: (365) 10 。 7
069 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) (1101) 2 的四個位數中,右邊算起的第一個位數,也就是所謂的 最小位數 (least significant digit, LSD ,或稱為最低位數或最小位 元 MSB) 就代表的 2 的 0 次方,也就是 1 ;第二的位數為 2 的 1 次 方,即是 2 ;第三個位數乃 2 的 2 次方,等於 4 ;最左邊那個位數 ,即所謂的最大位數 (most significant digit, MSD ,或稱為最高 位數或最大位元 MSB) 就是 2 的 3 次方,所以是 8 。例如數字 (1101) 2 是十進制中的 13 ,因為從左邊開始累積的數量為: (2 3 × 1) + (2 2 × 1) + (2 1 × 0) + (2 0 × 1) = = 13 。 8
070 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) (8 2 × 3) + (8 1 × 1) + (8 0 × 6) = = 206 。而十六進制的 (316) 16 就是十進制的: (16 2 × 3) + (16 1 × 1) + (16 0 × 6) = = 790 。 (101101) 2 = (2 5 × 1) + (2 4 × 0) + (2 3 × 1) + (2 2 × 1) + (2 1 × 0) + (2 0 × 1) = = 45 (524) 8 = (8 2 × 5) + (8 1 × 2) + (8 0 × 4) = = 340 (2BF) 16 = (16 2 × 2) + (16 1 × 11) + (16 0 × 15) = = 703 9
070 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) 10
071 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) 703 除以 16 得出 43 餘 15 , 因此最右邊的 LSD 位數是 15 ,也就是 F 剩下的 43 仍大於 16 ,所以還要再除,得出 2 餘 11 ,第二位數為 11 ,也就是B 因為 2 小於 16 ,故不須再除,就拿著當最左邊的 MSD 位數,因 此右起第三位數為 2 最後把這些得到的位數串起來,右起:F、B、2= (2BF) 16 11
071 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) 12
071 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) 340 除以 8 得出 42 餘 4 ,因此最右邊的 LSD 位數是4 剩下的 42 仍大於 8 ,所以還要再除,得出 5 餘 2 ,第二位數為2 因為 5 小於 8 ,故不須再除,就拿著當最左邊的位數,因此右起 第三位數 MSD 為5 最後把這些得到的位數串起來,右起:4、2、5= (524) 8 13
072 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) 14
071 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) 45 除以 2 得出 22 餘 1 , 因此最右邊的位數 LSD 是1 剩下的 22 仍大於 2 ,所以還要再除,得出 11 餘 0 ,右起第二位數 為0 剩下的 11 仍大於 2 ,所以還要再除,得出 5 餘 1 ,第三位數為1 剩下的 5 仍大於 2 ,所以還要再除,得出 2 餘 1 ,第四位數為1 剩下的 2 仍大於 2 ,所以還要再除,得出 1 餘 0 ,第五位數為0 右起第六位數為 1 ,因為 1 小於 2 ,故不須再除,就拿著當最左 邊的位數,因此右起第六位數 MSD 為1 最後把這些得到的位數串起來,右起:1、0、1、1、0、 1= (101101) 2 15
072 不同的數字系統:時間、重量、長度 進制轉換 ( 續 ) Windows 7 作業系統中所附的 「小算盤」裡,已經具備了二 進制、十進制、八進制、十六 進制之間的轉換功能。使用時 可以透過:「開始」 → 「所有 程式」 → 「附屬應用程式」 → 「小算盤」進入此程式後,將 工具列的「檢視」切換至「程 式設計師」模式即可。 16
072 不同的數字系統:時間、重量、長度 小數點 在學會了二進制、十進制、八進制、十六進制之間的轉換之後 ,接著要來談談數字系統裡的另一個話題:小數點 (radix point ,簡稱為 point) 。小數點常出現在需要精確表示的數字裡,並 且用來分隔整數 (whole number) 與小數 (fractional number) 。 除了十進制會用到小數點,二進制以及其他進制當然也會用到 。 在小數的部分,因為離小數點最近的位數是小數裡的最大位元 ,離小數點最遠的位數是小數裡的最小位元,所以,在轉換時 就會依據小數點算起,按照負次方的順序來類推。 17
073 不同的數字系統:時間、重量、長度 小數點 ( 續 ) (2 3 × 1) + (2 2 × 0) + (2 1 × 1) + (2 0 × 0) + (2 -1 × 1) + (2 -2 × 1) + (2 -3 × 0) + (2 -4 × 1) = 8 + 2 + 0.5 + 0.25 + = ( ) 10 另一方面,如果要將具有小數的十進制數字轉成二進制時,其 計算的方式也是要將整數與小數分開處理。 18
073 不同的數字系統:時間、重量、長度 小數點 ( 續 ) 53 除以 2 得出 26 餘 1 ,因此最右邊的位數是1 剩下的 26 仍大於 2 ,所以還要再除,得出 13 餘 0 ,右起第二位數 為 剩下的 13 仍大於 2 ,所以還要再除,得出 6 餘 1 ,第三位數為1 剩下的 6 仍大於 2 ,所以還要再除,得出 3 餘 0 ,第四位數為0 剩下的 3 仍大於 2 ,所以還要再除,得出 1 餘 1 ,第五位數為1 因為 1 小於 2 ,故不須再除,就拿著當最左邊的位數,因此右起 第六位數為1 最後把這些得到的位數串起來,右起:1、1、0、1、0、 1= (110101) 2 19
073 不同的數字系統:時間、重量、長度 小數點 ( 續 ) 20
074 不同的數字系統:時間、重量、長度 小數點 ( 續 ) 整數部分 (53) 10 : 53 除以 8 得出 6 餘 5 ,因此最右邊的 LSD 位數是5 因為 6 小於 8 ,故不須再除,就拿著當最左邊的位數,因此右起 第二位數 MSD 為6 最後把這些得到的位數串起來,右起:5、6= (65) 8 小數部分 (0.125) 10 : 小數 乘以 8 得到 1 ,取下第一個超過小數點的整數結果 ( 即 使是零也要取 ) ,拿來當最終目的數字的最大位數 (MSD) ,所以 是1;因為之後遇到剩下的小數部分,第一個數字已經為0, 所以完成整個運算。因此,取得的小數點後數字為:1= (0.1) 8 最後把整數和小數部分拼起來,原本的 (53.125) 10 就成為: (65) 8 + (0.1) 8 = (65.1) 8 21
074 不同的數字系統:時間、重量、長度 小數點 ( 續 ) 整數部分 (53) 10 : 53 除以 16 得出 3 餘 5 ,因此最右邊的 LSD 位數是5 因為 3 小於 16 ,故不須再除,就拿著當最左邊的位數,因此右 起第二位數 MSD 為3 最後把這些得到的位數串起來,右起:5、3= (35) 16 小數部分 (0.125) 10 : 小數 乘以 16 得到 1 ,取下第一個超過小數點的整數結果 ( 即 使是零也要取 ) ,拿來當最終目的數字的最大位數 (MSD) ,所以 是2;因為之後遇到剩下的小數部分,第一個數字已經為0, 所以完成整個運算。因此,取得的小數點後數字為:2= (0.2) 16 最後把整數和小數部分拼好,原本 (53.125) 10 變為: (35) 16 + (0.2) 16 = (35.2) 16 22
074 不同的數字系統:時間、重量、長度 正負數 正負數的使用,正數 (positive number) 的觀念很簡單,就是手 上有的東西。而在負數 (negative number) 方面,最早出現的場 合就是「賒欠」和「不足」。 對於數學中關於負數的概念,在運算時其實也有相減 (miuns) 的意思。 一般來說,要處理二進制正負數的方式有: (1) 最大位元表示法 ; (2) 1的補數表示法; (3) 2的補數表示法。 23
075 不同的數字系統:時間、重量、長度 正負數 ( 續 ) 在二進制中,會使用的補數有1的補數與2的補數兩種。1的 補數 (1‘s complement) 是指兩數的和為 1 ,則此兩數互為 1 的補 數,即 1 和 0 互為 1 的補數。 而2 的補數 (2‘s complement) 則是指將原數變成1 的補數之後 再加上 1 。 這中間最大的差別就在於,使用1的補數還是會+ 0 和- 0 的 情況,而2的補數則不會,所以2的補數是最在這些表示法中 ,最適合用來表示二進制正負數整數的方法。如果我們以一個 4 位元 (bit) 的二進制整數來說明的話,或許就能很容易地理解 了。 24
075 不同的數字系統:時間、重量、長度 正負數 ( 續 ) 25
075 編碼系統 既然電腦是透過二進制來處理所有的資料,因此人們需要用到 的各種文字 (letter) 、符號 (symbol) 、數字 (digit) 都要透過一套 放諸四海皆準的編碼系統 (coding system) 來規範,才能讓不同 電腦間的資料能互相流通。 26
075 編碼系統 ASCII 與 Unicode 電腦裡最常用到的字元符碼格式 (character coding format) : ASCII 、 EBCDIC 以及 Unicode ,這三種符碼格式相互轉換。 美國標準資訊交換碼 ASCII( 發音為 Ask-Ee)American Standard Code for Information Interchange ,使用了 7 位元也就是以 128 個不同的排列組合 (2 7 =128) ,來表達不同的字元。而 ASCII 碼 還有一個變形稱之為延伸 ASCII (extended ASCII) ,它使用了 八位元也就是以 128 再加上一個位元,總計 256 個狀態 (2 8 =256) 來表示。 27
076 編碼系統 BIG-5 與 CNS11643 而在各個非英語系的國家裡,為了要正確呈現其文字 ) ,就需要 發展出一套適合自身語言的文字內碼,甚至是連同樣使用羅馬 字為基礎的歐洲國家,也會使用像是 ISO8859 的編碼格式。在 臺灣以及部分華人地區通用的正體中文,最早就是以資策會在 1984 年聯合幾家廠商所推出的 BIG-5( 大五碼 ) 來編排,以適用 於當年的中文電腦軟體。 28
076 編碼系統 BIG-5 與 CNS11643 ( 續 ) 29
077 編碼系統 ISO 與 Unicode 雖然被稱為統一碼或萬國碼的 Unicode 允許了各國語言文字的 編碼空間,但在此之前,國際間其實已經有了一些具有規模的 國際編碼,最知名的就是出自於國際標準化組織。 這個早在 1984 年就已經問世的編碼標準,在推出之後被命名為 通用符碼字元集 (Universal Coded Character Set, UCS) 。 儘管有了這些萬國語言編碼的制定,而且當今許許多多的網路 服務都可以透過瀏覽器軟體來進行,但我們也要知道如果語言 編碼的選擇不當,將可能導致畫面出現亂碼 30
078 編碼系統 ISO 與 Unicode ( 續 ) 31
078 編碼系統 ISO 與 Unicode ( 續 ) 32
078 編碼系統 ISO 與 Unicode ( 續 ) 33