730 likes | 1.01k Vues
計算機概論 1001 課後輔導教材 單元 2 : 數字系統及數位邏輯. 主講老師:徐培倫. 單元 2. 數字系統及數位邏輯. 數字系統 數字系統的轉換 數字表示法 數位邏輯 邏輯閘 課後習題. 常見的數字系統. 十進位數字系統 :十進位是一套 以 10 為基數 , 逢 10 即進位 的數字系統 , 由 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 等十個數元所組成 , 這套數字系統是目前人類世界中最被廣泛採用的一套系統。
E N D
計算機概論1001課後輔導教材單元2 :數字系統及數位邏輯 主講老師:徐培倫
單元2 數字系統及數位邏輯 • 數字系統 • 數字系統的轉換 • 數字表示法 • 數位邏輯 • 邏輯閘 • 課後習題
常見的數字系統 • 十進位數字系統:十進位是一套以 10 為基數, 逢 10 即進位的數字系統, 由0、1、2、3、4、5、6、7、8、9 等十個數元所組成, 這套數字系統是目前人類世界中最被廣泛採用的一套系統。 • 二進位數字系統:二進位是一套以 2 為基數, 逢 2 即進位的數字系統, 在此系統下, 任何數都只能用 0 和 1 兩種數元所組成的符號來表示。這套系統即是電腦所使用的數字系統。
常見的數字系統 • 八進位數字系統:八進位是一套以 8 為基數, 逢 8 即進位的數字系統, 在此系統下, 我們只能使用 0、1、2、3、4、5、6、7 等八種數元, 如果運算過程中產生了大於或等於 8 的數, 便要往前進位。 • 十六進位數字系統:十六進位是一套以 16 為基數, 逢 16 即進位的數字系統,此數字系統是由 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 等十六個數元所組成, 相對於十進位來看的話, A=10 、B=11 、C=12、D=13 、E=14 、F=15。 • 下表將十進位數字 0 到 15 分別以二、八與十六進位來表示:
常見的數字系統 • 一般二進位數值我們都會加個小括弧並標註 『2』 , 例如:(101101)2; 而十六進位則標註 『16』 , 例如 (ACD8)16 , 依此類推。
數字系統的轉換 • 由於電腦內部是以二進位形式來處理資料, 所以當我們輸入資料時, 電腦會自動將它轉換成二進位的形式。以下就讓我們進一步來探討各數字系統之間互相轉換的方法。
5-2-1 轉換數字系統時的基本觀念 • 我們先用最熟悉的十進位數字系統來說明: • 因此, 對於任何十進位的正數 N, 假設包含 p 位整數和q 位小數, 則一定可以用以下的多項式來表示:
轉換數字系統時的基本觀念 • 要注意的是, p 位整數代表有 100、101、102、103、…10p-1這些位數, 由於是從 0 起算, 所以只到 p-1, 而非p。而小數部分則是從 1 起算, 所以有10-1 到10-q 這些位數。 • 將以上的觀念擴展到 K 進位的數字系統, 則成為 (將 10 換成 K): • N 為 K 進位的正數, p = 整數的位數, q = 小數的位數
轉換數字系統時的基本觀念 • 在以上的多項式中, K 就是所謂的『基底 (Base, 又稱為 Radix)』。換言之, 平常所謂的十進位, 就代表基底為 10;二進位代表基底為 2。而在不同的數字系統之間轉換, 便是『基底轉換 (Base Conversion)』。 • 後續各小節會說明基底轉換的各種方式與技巧, 有些可直接用心算、有的必須用筆算才能算出答案。無論如何, 它們的基本原理都是以上述的多項式所發展出來的。所以當我們忘了某些方式或技巧時, 只要先將數字以上述的多項式來表示, 就能在任何數字系統之間互相轉換。
5-2-2 二進位與十進位間的轉換二進位轉換成十進位 • 二進位轉換成十進位時, 其二進位整數部份, 在小數點左邊第一位的位值為20、第二位的位值為 21、第三位的位值為 22 ...;而小數部分, 在小數點右邊第一位的位值為 2-1、第二位的位值為 2-2 ...等依序類推。以下我們以 (11101.11)2來做示範。
二進位轉換成十進位 • 要將其轉為十進位, 只要將每一個二進位數乘以該數的位值, 然後相加即可獲得相對應的十進位數值:
十進位轉換成二進位 • 將十進位轉換成二進位, 可分為兩個部份來處理;在此我們以 (29.25)10轉換成二進位來做示範。 • 整數部分 • 採連續除以 2 , 並保留 『餘數』 , 直到除法運算後的商數為 0 時停止;然後由最後一次產生的餘數開始, 依序由左向右排列, 即可完成整數部分的轉換。
十進位轉換成二進位 • 小數部分 • 將小數部份乘以 2 , 保留所得乘積的 『整數部分』 , 繼續將乘法運算後所得的小數部分乘以 2 , 直到所得的小數為 0 時停止;然後由第一次取得的整數開始, 依序由左向右排列, 即可完成小數部分的轉換。
十進位轉換成二進位 • 最後將整數部份加上小數部份:11101 + 0.01 = 11101.01 。所以 (29.25)10 =(11101.01)2 。
數字表示法 • 到目前為止, 我們所討論的數字都是正數。至於負數, 該如何表示呢?對人而言, 負數就是在正數的前面加上『-』符號即可;但是對電腦而言, 並無眼睛可辨識正負符號。因此, 我們必須制定一套讓電腦能夠辨識負數的表示法,常見的表示法有以下三種: • 最高位元 (Signed Magnitude) 表示法 • 1 的補數 (1's Complement) 表示法 • 2 的補數 (2's Complement) 表示法 • 為了便於說明, 以下我們一律用 8 位元的整數作為範例。
最高位元表示法 • 最高位元表示法又稱為『附加符號表示法』, 也有人譯為『帶符號大小表示法』。其原理是利用最高位元 (MSB, Most Significant Bit) 代表正或負, 其餘位元表示數值。MSB = 0 代表正數;MSB = 1 代表負數, 因此該 MSB 又稱為符號位元 (Sign Bit), 如下圖:
最高位元表示法 • 因此, 以8 位元的整數為例, 其可表示的正負數如下表所示:
最高位元表示法 • 最高位元表示法有個缺點, 就是有 2 個寫法都代表 0 (00000000 與10000000), 使得原來總共可以表示 256 個數字, 變成只能表示 255 個。
1 的補數表示法 • 使用 1 的補數(1's Complement) 表示法時, 一個數的負數即是將該數的每一位元數值 0、1 互換 (即 1 變 0, 0 變 1)。如下表:
1 的補數表示法 • 1 的補數表示法與最高位元表示法有同樣的缺點, 也有 2 個 0 (00000000與 11111111), 因此在實際上, 並無法被電腦所採用。在電腦裡, 實際被使用的是 2 的補數表示法。
2 的補數表示法 • 在 2 的補數(2's Complement) 表示法裡, 一個數的負數即是其 1 的補數值再加 1, 如下表示:
2 的補數表示法 • 由上表可知, 只有在 0 時, 該數 1 的補數值加 1, 才會使得最高位元進位, 此時該進位的位元捨棄, 使得該數 ( 0 ) 的正負數表示法相同;因此以 2 的補數法來表示負數, 就不會有 「兩種方式表示 0」 的困擾了。結果正數由 1 ~ 127 總共有 127 個;負數由 -1 ~ -128;再加上 1 個 0 , 所以 8 個位元總共可以表示 256個數。
浮點數的表示法 • 在電腦中, 當用到含有小數的數字 (如 3.14);或是整數的值 (如 10 的 20次方) 超過整數表示法所有位元所能表現的最大值時, 這時就需要使用一種特別的表示方法, 稱之為浮點數(Floating Point) 表示法。
正規化 • 在正式介紹浮點數表示法之前, 我們先大致說明正規化(Normalization):當我們要將一個數字以浮點數表示法表示時, 需要先將其正規化。所謂的正規化, 是將該數字轉換成二進位的 1.xxxxxx × 2 指數 的形式。
正規化 • 例如要計算 (12.25)10經正規化的結果, 需先將其轉換為二進位 (12.25)10 =(1100.01)2 , 再正規化成 1.10001 × 23。此時, 1.10001 × 23可解讀出以下資訊, 這些資訊將在轉換成浮點數表示法時用到: • 此數值為正數。 • 指數為 3。 • 小數部分為 10001 。
浮點數表示法 • 浮點數表示方法相較於前二節所介紹的正負整數表示法, 最主要的差別就在於小數點的位置。之前所介紹儲存正負整數的方法, 小數點都固定在最右邊,所以其又稱為定點表示法。 • 不同 CPU 雖有其各自的浮點數表示法, 但一般較常採用 IEEE 協會所訂定的浮點數表示法標準( IEEE Standa rd 754) , 其分成單精確度(Si n g l e Precision) 及雙精確度(Double Precision) 二種。兩者的差別在於單精確度是以 32 個位元來表示浮點數, 雙精確度則是用 64 位元表示。以下我們以單精確度為例來說明:
浮點數表示法 • 正/ 負符號:表示這個數字是正數還是負數, 用 0 表示正數, 1 表示負數。
浮點數表示法 • 偏差指數:表示這個數字的指數部分。8 個位元可表示數值 0 ~ 255 。由於要表示的數字可能很大, 也可能很小, 因此其指數部分可能為正或負。為了要能顯示正負兩種指數, 因此以 127 為指數偏差值。將數字的指數值加上指數偏差值127, 即可算出要儲存的偏差指數。例如某數的指數為 -3, 則會以 127+(-3)=124 儲存。 • 因此單精確度的表示法, 能表示指數的範圍為 -127 ~ 128 。
浮點數表示法 • 小數部份:表示這個數字的小數部分。這裡的小數部份是指以二進位形式,且正規化後的小數部份。 • 在此依舊以 (12.25)10為例, 看看如何以單精確度的浮點數表示法來表示。 • 首先, 它是個正數, 所以第一個位元已經確定是 0。 • 接著將其正規化成 1.10001 × 23, 此時便可計算出偏差指數為 3 + 127 =130, 再把 130 轉換為長度為 8 位元的二進位 (10000010)2 , 於是可以得到偏差指數的部份就是 10000010 。
浮點數表示法 • 最後是小數部份, 小數部份即是正規化後二進位的小數部份, 至於小數點前面那個 1, 則因為所有正規化的數字都有, 所以不用記錄, 只要顯示後面的小數部份 10001, 但小數共有 23 個位元, 所以要把後面的位元補上 0。最後得到的浮點數表示如下:
浮點數表示法 • 浮點數表示法雖然以相當多的位元來表示, 但對於一些數值, 若正規化後無法以有限位元來表示小數部分 (例如 0.3 經正規化後, 其小數部分會成為循環), 則其以浮點數表示法表示時, 只能得到近似值。
文字的表示法 • 電腦不但可以幫我們做快速精確的數值運算, 還可以做文字資料的處理。要處理文字資料, 就必須先瞭解文字資料在電腦中的表示方法。 • 數值資料在電腦內部是以「二進位」的形式來表示, 這是因為電腦只能處理二進位形式的資料;同樣地, 我們輸入電腦的文字資料, 亦會被轉換成二進位碼的形式儲存。這種將文字資料轉換成二進位碼的系統就稱為編碼系統。以英文字母為例, 我們可以建一個編碼表。
文字的表示法 • 我們把每一個英文字母編上一個號碼, 建成一套編碼表。這個編碼表可以存放在鍵盤內的電路上。當我們按下一個鍵時, 鍵盤的電路便依表格的規定, 把該鍵對應的二進位碼送往電腦主機 (例如按下 鍵, 鍵盤便會把其相對應碼65 的二進位數 01000001 傳到主機)。同樣地, 當我們想將文字資料輸出時, 編碼系統亦會將二進位碼轉換成對應的字元符號, 再藉由輸出設備顯示或列印出來。 • 電腦是以數字碼來表示文字資料, 例如 65 代表 "A", 66 代表 "B"。像這種以數值代表字元的方式稱為編碼, 不同的系統可能會使用不同的編碼方式。
常用的英文電腦編碼系統 • 目前在 PC 上常用的英文編碼系統有 3 種, 分別是:ASCII 碼、ISO8859 碼和 EBCDIC 碼。 • ASCII 碼:是美國標準資訊交換碼 (American Standard Code for Information Interchange) 的縮寫;它不但包含英文大、小寫字母, 還有阿拉伯數字、控制字元以及各種符號等。ASCII 碼是以 7 個位元來表示, 因此共有128 個 ASCII 碼, 每一個碼都對應一個字元, 在電腦中是以 1 個位元組來儲存。其數值與字元的對應表如下:
常用的英文電腦編碼系統 • 由於 1 個位元組 (8 個位元) 可以表示出 28 = 256 種資料, 因此在 PC 上又將 ASCII碼擴充, 多了 128 個擴充符號字元 (號碼為 128 ~ 255), 可用來繪製表格的格線, 或印出特殊的字母、符號等。
常用的英文電腦編碼系統 • ISO8859 碼:由於歐洲地區語系的文字除了 26 個英文字母(也就是拉丁字母)外, 還包含了拉丁字母的變形(例如上下標)與其他字母(例如希臘字母)等。有鑑於此, ISO 國際標準化組織便將編碼系統由 7 個位元擴充到 8 個位元, 其中 0 到 127 的編碼與 ASCII 碼相容, 128 到 255 碼則依地區不同, 包含更多的特殊字元。ISO8859 的編碼系統又依地區語系的不同, 區分成幾個部分, 例如丹麥和芬蘭等語系使用 ISO8859-1 編碼系統, 而羅馬尼亞和波蘭等語系則採用 ISO8859-2 編碼系統。
常用的英文電腦編碼系統 • EBCDIC 碼:EBCDIC 碼的全名是 Extended Binary Code Decimal Interchange Code, 是美國 IBM 公司所制定的編碼系統, 主要使用在 IBM 一部份大型主機上。EBCDIC 碼的每一個字元是由 8 個位元所組成, 共有 28種組合, 可以表示 256 個字元。
常用的中文電腦編碼系統 • 在電腦中, 8 個位元 (28 = 256) 就足以表示所有的英文字母、阿拉伯數字及許多特殊符號;但是, 8 個位元卻不足以表示所有的中文字, 因此中文字是以 2 個位元組 (16 個位元) 來編碼。由於這些碼都是中文字儲存在電腦內部時的編碼, 所以又稱為中文的內碼。 • 以下就針對目前比較常使用的編碼系統做介紹: • Big5 碼:由資策會工業局聯合 13 家業者於 1984 年所共同制定的編碼系統, 包含了 5401個常用字、7652 個次常用字及 408 個符號 (含標點符號、注音符號、單位符號……), 共 13461 個字。
常用的中文電腦編碼系統 • Big5 碼雖然已收錄了 13461 個字, 但仍缺少一些罕見字, 例如大家在看網頁時, 有時會發現游錫 的 字,以及王建 的 字無法顯示, 這都是因為 Big5碼沒有這 2 個字所致。
常用的中文電腦編碼系統 • 由於 Big5 碼並沒有用完 2 個位元組所能顯示的字數, 仍有許多內碼未被使用, 因此便有些單位以其為基礎, 發展出衍生的 Big5 編碼, 例如早期倚天中文系統使用的 Big5_Eten 等。
常用的中文電腦編碼系統 • CP950 碼:CP950 (CodePage 950) 碼也稱為 MS950 碼, 由微軟公司所發展, 從 Big5 碼擴充而來的, 其應用於微軟的 Windows 作業系統中。原本 Windows 作業系統內部是採用 Unicode 編碼方式 (稍後會介紹), 但為了配合多國語言使用, 系統會根據使用者的國籍設定, 在輸出、輸入和顯示時, 搭配以不同的 CP*** 編碼方式呈現, CP950 便是代表繁體中文的編碼方式, 如果是泰文就會轉以 CP874 的編碼呈現。
常用的中文電腦編碼系統 • CNS11643:由於 Big5 碼字數不足, 因此國內許多政府機關為了符合其需要, 都建立了自己的編碼系統, 像是財稅資料中心的財稅碼、戶政的 EUC(Extend Unix Code) 碼等。但各單位編碼系統不同, 造成文件交換的困難,因而政府在 1986 年制定了 CNS11643 通用漢字標準交換碼, 提供國內資訊系統中文交換與處理上的標準依據, 1992 年更名為國家標準中文交換碼。經過歷年的擴充, 目前 CNS11643 已包含約 11 萬字, 詳細資訊可參考官方網站 http://www.cns11643.gov.tw 。
全球統一的編碼系統 • 現在全世界有許多語言在被使用, 甚至有些語言還會有多種編碼系統 (例如繁體中文就有 Big5、CP950…), 使得全世界有相當多種編碼系統。這也衍生出一個問題:當使用不同編碼的電腦要交換資料時, 由於沒有共用的編碼系統, 以致無法解讀彼此的文字。 • 例如我們平時在瀏覽網頁或收信時, 有時就會發現網頁或信的內容全部是亂碼, 其原因可能就是當初撰寫這些網頁、信件時所採用的編碼系統, 跟我們解讀時所使用的編碼系統不同, 以致無法 "溝通" 所致:
全球統一的編碼系統 • 為了解決這樣的問題, 於是出現了 Unicode 碼 (統一碼、標準萬國碼)。它是由 Unicode 協會及 ISO 國際標準化組織針對各國文字、符號制定的統一性編碼系統, 將全球語言編在一起, 而達成統一編碼的目的。