第三章 數字系統與資料表示法 課前指引 也許您也早已聽過,電腦實際處理的資料,其實只有0 與1這兩種資料。對電腦來說,所有東西都是一個數字(0 或1 所組成)。字母、字串和標點符號是數字,聲音和圖片是數字,甚至電腦本身的指令也是數字。
章節大綱 3-1 資料表示法 3-2 數值資料表示法 3-3 電腦與數字系統 3-4 數字系統的轉換 備註:可依進度點選小節
3-1 資料表示法 淺談資料處理(1) 電腦真正在處理資料時,並不是以位元為單位而進行處理,而是以「位元組」(Byte)為基本的處理單位,一個位元組等於八個位元,所以可以代表28=256 個資料。 有了位元組,電腦可以表示256 個不同的符號或字元的其中一種。例如一般英文字母,數字或標點符號(如+、–、A、B、%)都可由一個位元組來表示。 當各位讀者在操作電腦時,只要按下鍵盤上的鍵,即可立刻顯示代表的字母與符號。
淺談資料處理(2) 不過對於電腦龐大的記憶體容量而言,位元組單位仍然太小,為了計量方便起見,定義了更大的儲存單位。例如:
編碼系統簡介(1) ASCII 採用8 位元表示不同的字元,最左邊為核對位元,故實際上僅用到7 個位元表示。其中0 ∼ 9 表示阿拉伯數字,65 ∼ 90 表示大寫英文字母,97 ∼ 122 表示小寫英文字母,下表為部份ASCII 編碼與二進位、十進位表示法的對應: 續下頁
編碼系統簡介(2) ASCII 在電腦系統中是相當重要的編碼系統,早期電腦與電腦之間的溝通與資料交換上面臨編碼不同的問題,例如早期的IBM 電腦上所使用的編碼系統是EBCDIC(Extended Binary Coded Decimal Interchange Code)編碼,稱為「擴展式BCD 碼」。 其原理乃採用8 個位元來表示不同之字元,因此EBCDIC 碼最多可表示256 個不同字元,比ASCII 碼多表示128 個字元。例如EBCDIC編碼的'A' 編碼11000001,'a' 編碼為10000001。EBCDIC 仍為IBM 公司主電腦和中型系統所使用,但是鮮少用在個人電腦上。
中文編碼(1) 在中文編碼的發展上,中文電腦也許是因為早期倚天中文推銷之成功(即使是現在,仍可以在一些店家看到它的存在),使得Big-5 碼成為中文電腦的編碼依據,一般俗稱為「大五碼」,Big-5 碼一共有13000 多個元素,其中常用字為5401 個,不常用字為7652 個,符號為408 個,至於中國大陸盛行的簡體字標準內碼則為GB 碼。
中文編碼(2) Big-5 碼的組成位元數較多,相對地字集中也包含了較多的字元,在Big-5 碼的字集中包含了5401 個常用字、7652 個次常用字,以及408 個符號字元,可以編出約一萬多個中文碼。 不過在大陸所使用的簡體中文,卻是GB 的編碼格式。因此如果這些文字內碼無法適當地進行轉換,那麼就會顯示成亂碼的模樣。
Unicode碼(1) Unicode 碼也是使用兩個位元組來表示一個文字符號,因此可以表示216=65536 個文字符號,不過Unicode 編碼在處理時,是將兩個位元組同時處理,而不是加以組合,也就是從1 到第16 個位元全部拿來使用,而不是區分為高低兩個位元,因此稱之為「定長式編碼系統」,這避免了像Big-5 碼合併位元組所會造成的衝突問題。 Unicode 碼的最大好處就是對於每一個字元提供了一個跨平台、語言與程式的統一數碼(digit)。
Unicode碼(2) 為了與ASCII 相容,Unicode 的0 ∼ 127 對應原來的ASCII 編碼,沒有使用到的位元全部設為0,而其它的部份則依不同的國家語系而有所不同;16 位元的Unicode 又稱之為UCS2,新的Unicode 版本則稱之為UCS4,它使用32 個位元來進行編碼,為了與原來的Unicode 相容,其它0 ∼ 65535 與原先的Unicode 編碼相同,其餘的部份用來表示少數語言或其它罕見文字。 在新的作業系統或軟體上,都已經支援使用Unicode 編碼,例如較新版本的Internet Explorer 與Windows2000、Windows XP、Vista 等等。
3-2 數值資料表示法 認識補數 1補數系統(1's Complement 2補數系統(2's Complement) 是指如果兩數之和為1,則此兩數互為1 的補數,亦即0 和1 互為1 的補數。也就是說,打算求得二進位數的補數,只需將0 變成1,1 變成0 即可;例如01010102 的1 補數為101001012。 2補數系統(2's Complement) 「2 補數系統」的作法則是必須事先計算出該數的1 補數,再加1 即可。
負數表示法(1) 帶號大小值法 (Sign Magnitude) 若用N 位元表示一個整數,最左邊一位元代表正負號,其餘N-1 位元表示該數值,則此數的變化範圍在 -2N-1-1~ +2N-1-1。如果是以8 個位元來表示一個整數,則最大的整數為(01111111)2 =127,而最小的負數(11111111)2 = -127。而0 的表示法有(0000000)2 或(1000000) 2。
負數表示法(2) 1's 補數法(1's Complement)
負數表示法(3) 2's 補數法(2's Complement) 最左邊的位元還是符號表示位元,正數的表示法則與帶號大小值法相同,但負數的表示法是用1 補數法求得,並在最後一位元上加1。基本上,「2‘s 補數法」的做法就是把「1’s 補數法」加1 即可。例如9=(00001001) 2 的「1‘s 補數」為(11110110) 2 ,其「2’s 補數」則為(11110111) 2 。 由於使用「2's 補數法」的處理流程最為簡單,而且運算成本最低,至於末端進位,可直接捨去不需加1,並且0 的正負數表示法只有一種,這也是目前電腦所採用的表示法。
3-3 電腦與數字系統 數字系統簡介 從科學的角度來看,使用哪一種進位系統並沒有任何不同,人類最後使用十進位系統,大概與人類雙手共有10 根手指頭有關,十進位系統並不是到現在才普及,古代的各國家或民族早就在使用十進位系統,舉凡埃及、巴比倫、希臘、羅馬、印度、中國等等,雖然各國家民族所使用的符號不同,但計算法則都是相同的。 進位系統要看使用於何種場合,在電腦的世界中因為都在處理0 與1 兩種訊號,使用二進位系統來表示是最佳的選擇,您當然也可以使用十進位系統來表示,不過只是徒增困擾而已。
二進位系統(1) 電腦內部所進行的數學運算為二進位系統,只有0 與1 兩個數字,每兩個數目就往前進一位,例如:
二進位系統(2) 二進位的加法 在進行二進位的加法時,與十進位加法類似,每個位數上下對應相加,如果數目為二就往前進位,進位後與前一位相加結果數目如果為二,也是往前進一位,如下所示:
二進位系統(3) 二進位轉十進位 二進位如果要轉換為十進位表示法,可參考十進位系統的做法,十進位系統若要表示219 這個數字,可以如下表示: 同樣的,如果要將二進位表示為十進位,例如將11011011(十進位219)表示為十進位數字,則可以如下進行運算:
二進位系統(4) 十進位轉二進位 要將十進位的數字轉為二進位的數字,則可以利用輾轉相除法求出每個指數的係數,我們可以先看看十進位數字是如何求出係數: 依照同樣的方法,我們可以用二進位來表示一個十進位數字,如右所示:
八進位與十六進位系統(1) 八進位系統 八進位系統其實與十進位系統相彷,只不過是以8 為基底,也就是只用到數字01234567 這八個數字,超過則往前進一位,要將八進位轉為十進位也很簡單,如八進位的333 就表示十進位的219,計算方式如下所示:
八進位與十六進位系統(2) 十六進位系統 十六進位系統是以16 為進位的基底,除了使用十進位系統的0123456789 數字之外,還使用了ABCDEF 來表示十進位系統的10 ∼ 15 的數字,超過這16 個數字則往前進一位,所以十位進位的F4 就表示十進位的244,F 表示十進位的15,所以其計算方式如下所示:
3-4 數字系統的轉換 10進位轉成2、8、16進位(1) 將12610換算成二進位
10進位轉成2、8、16進位(2) 將12610換算成八進位 十進位轉換成十六進位,作法和上面兩種相同,如下所示:
2進位轉成8、16進位(1) 如果要將二進位變換成十六進位,其方法與轉換規則如下: (1)將二進位的數字,以小數點為基礎點,小數點左側的整數部份由右向左,每四位打一逗點,不足四位則請在其左側補足0;小數點右側的小數部份由左向右,每四位打一逗點,不足四位則請在其右側補足0。 (2)將步驟1中的每四位二進數字,換成十六進位數字,即成十六進制。 續下頁
以範例來為各位說明。將100110101011.0101001換算成十六進位
進位轉成8、16進位(2) 如果要將二進位變換成八進位,其方法與轉換規則如下: (1)將二進位的數字,以小數點為基礎點,小數點左側的整數部份由右向左,每三位打一逗點,不足三位則請在其左側補足0;小數點右側的小數部份由左向右,每三位打一逗點,不足三位則請在其右側補足0。 (2)將步驟1中的每三位二進數字,換成八進位數字,即成八進制。 續下頁
以範例示範說明。將100110101011.0101001換算成八進位
8、16進位轉成2進位 如果要將八進位變換成二進位,其轉換規則是只要將每位八進位數字,換成三位二進位數字即可。同理要將十六進位變換成二進位,轉換規則是只要將每位十六進位數字,換成四位二進位數字即可。例如將73648 換算成二進位,其結果為111 011 110 1002。
本章結束 Q&A討論時間