2013年3月28日 星期四

電腦運作原理

(1) CPU的歷史演進~處理位元的進化
在1971年,Intel公司及Marcian E.Hoff共同發表了-4004處理器,它是一個4位元的微處理器,為目前所見各處理器的先驅,主要使用在早期電視遊樂器和小型微處理器為基礎的控制器。到了1974年,Intel提出了延續性相容的版本-8008微處理器,由於其記憶體指令集仍然很小,使得其可用性受到許多限制,因此在1973年Intel提出了最早的8位元微處理器-8080,其處理速度已較8008快了將近10倍。
1976年,Intel又發表了8086微處理器,約一年後又提出了8088,使用在IBM的個人PC上,兩者均是16位元微處理器,之後又改良出80186、80286,而80286的時脈頻率在Intel最終版時已可達到16MHz,每秒可執行8億個指令數(8MIPS)。之後再進一步演進到80386、80486微處理器的時代,則已邁入32位元的微處理器時代,而到目前為止的Pentium Ⅲ、Pentium Ⅳ時期,CPU依然處於32位元的世代(Pentium系列雖然在外部頻率達到64位元,但是其內部的資料匯流排採用的是32條*2的架構,因此尚不足以稱為真正64位元的處理器)。到了近年來,AMD推出伺服器版所使用的K8 Opteron處理器及針對桌上型電腦推出Athlon 64處理器後,Intel也打出伺服器版的Xeon DP處理器來與AMD抗衡,正式揭開64位元微處理器的世代,相信未來Intel針對一般消費型市場所主打的Pentium Ⅳ處理器勢必也將研發新的晶片以投入64位元處理器的競爭市場。
不過大家也不用陷入位元的迷失之中,因為要能達到處理器最大的效能,必須仰賴作業系統(OS)、記憶體、硬體、匯流排等元件來配合來行,以目前的技術來看,微軟的作業系統在Windows 2003 Beta 1之後才正式走向64位元的作業系統,要達到全面加速的64位元時代,雖不遠但仍需一段時間的努力才行。
(2) CPU的組成
CPU是由「矽」晶片製作而成,科學家利用顯微照相技術,將數百萬顆的電晶體所組成的電路縮小至小小的晶片之中。其組成包括控制單元(Contrl Unit)、算術邏輯單元(Arithmetic/Logic Unit)、暫存器(Register)、快取記憶體(Cache)、控流排(Bus)等。
控制單元用來控制與指揮電腦各單元間相互運作、資料傳遞等,主要的功能包括:(1) 負責接受命令與解釋命令。
(2) 負責整部電腦的指揮及控制。
(3) 負責控制程式與資料進入主記憶體。
算術邏輯單元目的在負責算術運算與邏輯判斷的工作。主要的功能包括:
(1) 負責電腦系統中的算術(加、減、乘、除)、邏輯比較(比較大小、判斷)工作。
(2) 決定數值運算的速度。
暫存器是CPU中暫時存放資料的地方,也是電腦所有記憶單元中存取資料最快的裝置,常見的暫存器有累加器指令暫存器位址暫存器一般用途暫存器旗標暫存器程式計數器
快取記憶體,包括L1 Cache、L2 Cache,當電腦要執行程式時,必須將所需的資料載入主記憶體中,以供CPU執行的過程中擷取,然而主記憶體的速度無法滿足CPU的需求,因此才有快取記憶體的存在,節省在CPU執行過程中等待資料所需的時間。早期電腦的CPU中只加入L1 Cache,而L2 Cache則建於主機板上,目前新款的CPU已將L1 Cache、L2 Cache內建於CPU中,新增L3 Cache於主機板上溝通CPU與主記憶體。
匯流排是電腦元件間互相傳遞訊息、溝通資料的管道,位於CPU內部的匯流排稱為「內部匯流排」,依照所傳遞訊號的類型又可分為位址匯流排(Address Bus)、資料匯流排(Data Bus)、控制匯流排(Contrl Bus)。
除此之外,在處理器組成中尚有一個部分需要考量,稱為「指令集」。一般而言指令集的結構可以分為兩種,一種稱為「複雜指令集(CISC)」;另一種稱為「精簡指令集(RISC)」。前者既然稱為「複雜」顧名思意,即內建在晶片中的指令數較多,但相對而言讀取指令與解譯指令的時間也較長,執行速度較慢、耗電量較大;後者則只將部份的指令內建於晶片之中,因指令數少,故讀取與解譯指令的速度反而較快,但是若執行到非內建的指令時,因為需要透過數個指令結合成所要執行的指令要求,相對而言執行的速度反而較複雜指令集要來得慢。
(3) CPU的運作原理與方式
指令或資料進入電腦之後,執行一個指令的過程包括:記憶→擷取(Fetching)→解碼(Decoding)→執行(Executing)→儲存(Storing)等幾個步驟,又稱為指令週期。其中從擷取開始即交由CPU來執行,首先我們先來探討到底這些步驟必須負責那些事。
記憶:已輸入的指令或資料存在記憶單元之中,記憶單元必須提供CPU執行過程中所需要的資料,這邊所看到的記憶單元可廣泛地包括主記憶體、快取記憶體、暫存器等。
擷取:指控制單元由記憶單元中擷取指令或資料。
解碼:主要的動作在「分析指令」,並發出適當的控制訊號以便執行指令。
執行:算術/邏輯單元負責依照傳過來的指令需求,進行算術運算及邏輯判斷的動作。
儲存:控制單元將結果存至內部的暫存器或外部的記憶單元。
舉個例子來說,若我們要計算「(5+6)*7-8」,則在電腦中的運作方式可以簡單地表示如下:

各位可能會想說,電腦怎麼這麼笨,「我一個步驟就可以算出69了,它要執行這麼複雜的處理」。有一個要點大家必須先搞清楚,雖然電腦在算出69的過程中經歷了很多步驟,但是它所用的時間卻是無比的節省,一般而言,電腦執行一個指令的時間,通常僅需要百萬分之一秒(MIPS,million of instruction per second),甚至更短的時間,反過來說CPU每一秒可執行數百萬個以上的指令。以上述這樣四個步驟的處理,對它而言不用超過0.1秒就可以完成。
(4) 常見的CPU規格與種類
依照針腳數來作區隔:
之前我們說過CPU背後一根根金針狀的東西我們稱為針腳,每一家公司對於每一種發行的CPU其針腳數卻未必相同,不同的針腳設計,除其定義不同外,對於支援的晶片組及安裝的插槽也不相同。
若以針腳數來區隔的話,CPU的類型可以包括Slot 1、SCOKET 370、SCOKET 478、SCOKET A等。在Pentium早期的封裝方式必須使用的插槽規格為Slot1,它有點像電視遊樂器的卡匣方式,在早期為Intel打下不小的江山。但是這種封裝方式無法有效地解決微處理器在運作時所發出的高熱,價格較高,再加上AMD的嚴厲挑戰下,使得Intel公司不得不選擇較具有挑戰力的「Scoket 370」結構,只是當時並非用在Pentium等級的電腦,而是另一款主打低價市場的「Celeron」處理器。在目前Pentium Ⅳ的世代下,Celeron及Pentium等級的電腦均已演進到SCOKET 478的規格,而這個規格卻也為Intel創下不錯的成績。
相對於Intel公司的不斷變更針腳的規格,AMD公司也有相同的因應策略,從早期的Slot A、Scoket 462、演進到目前的Scoket A,在在均有與Intel相抗衡的意味,不過古諺有云「鷸蚌相爭,漁翁得利」,相信在兩雄相爭的結果,最終得利的還會是身為消費者的你我。
依照等級來作區分:
Intel和Amd公司為了要吸引低價市場的民眾並迎合高階使用者的需求,兩家公司在研發的產品均設計高階規格與較低等級兩種,低階等級的機種整體效能也許比不上高階機種,但對一般的使用者而言在操作上已經足以應付所需:
Intel公司
AMD公司
高階高價
Pentium系列
Athlon系列
低階低價
Celeron系列
Duron系列
高低差別
Celeron除了外頻工作時脈及L2 Cache容量等等架構有所差異,造成的效能落差外,其餘和Pentium均相同。
Duron與Athlon最主要的差別在於L2 Cache的容量大小較小,使得其效能略遜一籌,此外在系統匯流排及時脈頻率也略小些。
除此之外伺服器用、一般個人電腦用、筆記型電腦用的處理器也不相同,以筆記型電腦而言,因為需要特別注意省電的功能,因此筆記型電腦的處理器均會加上M(Mobil)的字樣,如Pentium M,強調適用於行動電腦使用,目前筆記型電腦主打的處理器型號為Centrino(迅馳),強調Pentium M配合Intel855的系統晶片及無線網路功能,提升整體效能、降低消耗功率、增加電池續航力,相對而言,其他硬體設備也需要能配合才行。

不同架構的處理器,雖然外觀、腳位不同,但卻可以執行相同的應用程式,我們稱為「相容處理器」。有些不同結構的系統,其執行的的應用程式並不相同,因此所使用的處理器也不同,例如,麥金塔電腦(蘋果電腦)所使用的處理器稱為PowerPC G4就不能應用在一般的個人電腦上面,同樣的在個人電腦上所使用的處理器也不能應用在麥金塔電腦。
以下介紹幾款目前較新且常用品牌的處理器:
K7
(Athlon XP3200+)
K8
(Athlon 64 3200+)
Celeron 2.6GHz
Pentium 4 3.2GHz
插槽類型
Socket A
Socket 754
Socket 478
Socket 478
運作時脈
2.25GHz
2GHz
2.6GHz
3.2GHz
外頻
166MHz
200MHz
100MHz
200MHz
倍頻
13.5X
10X
26X
16X
電晶體數
5430萬
105.9百萬
4200萬
5500萬
(5) CPU的三個親密伴侶:主機板,記憶體,散熱風扇
主機板:又有人稱為母板,可以說是除了處理器之外,重要性最大的核心元件。電腦其他電子元件設備均需與主機板相連結方能正常運作,在主機板上除了我們之前所介紹的插槽外,還配置有「主動晶片組(又稱系統晶片組)」北橋晶片及南橋晶片來協助處理器掌控整部電腦的執行,其中北橋晶片組負責高速介面之間的聯結,這所謂的高速元件包括處理器、AGP介面、記憶體等;而南橋晶片則掌管低速即可運作的周邊裝置、擴充介面等。同學若想對主機板有更進一步的認識,可參閱主機板單元。
記憶體:之前我們提過CPU所處理的資料大部份由記憶體來提供,當程式一開始要執行前必須將一些程式執行過程中所需的資料放置於主記憶體中以供處理器取用。因此記憶體的存取資料的速度及大小多少會影響到整部電腦的效能及處理器運作的能力,當記憶體速度太慢或大小不足,則處理器會有許多的時間在等待資料的供給,相對而言,CPU會有很多的閒置時間,自然而然造成整體執行效能不彰。(註:若主記憶體空間大小不夠又需要執行程式時,會使用輔助記憶體,如硬體當作記憶體來使用,我們稱為「虛擬記憶體」,但可想而知輔助記憶體存取資料的速度又遠較主記憶得來得慢,又如何比得上CPU呢?)同學若想對記憶體有更進一步的認識,可參閱記憶體單元。
散熱風扇:散熱風扇的組成包括:「散熱風扇」、「散熱片」、「扣具」。處理器是一個高速執行、運轉的電子元件,因此在運作的過程中會產生高熱,而這「熱」若無法正常排除,則將會造成系統執行過程的不穩定性,這不穩定性將有可能造成電腦容易當機,讓整個電腦操作與使用的過程無法順利完成。目前常用處理器的散熱系統除了散熱風扇外,還有散熱膏,藉由散熱膏的能力可以讓散熱片底部更加貼近處理器表面,讓處理器所發出的熱量,能更有效率地透過散熱片及散熱風扇的協助排出。所以說散熱風扇可以說是除主機板之外最貼近CPU的親密戰友。

數字系統及數字系統的轉換

 

回上一層數字系統及數字系統的轉換

電腦內部資料是以0和1來儲存的,這種只有0和1兩種狀態的系統,相當於二進位系統;本節將就二進位系統探討其轉換、加、減、AND及OR運算。

1.電腦常用數字系統

  1. 十進位制(decimal number system):十進位制是一種滿10進位,基底為十的數字系統,由0、1、2、3、4、5、6、7、8、9等十個數字組成,為日常生活中普遍使用的數制。例127810,其基底通常被省略,亦即1278。
  2. 二進位制(Binary number system):二進位制是一種滿2進位,基底為二的數字系統,由0和1兩個數字所組成,為電腦最基本的數字系統。通常表示時會在數字前加一"B"以便於識別,例B1101或1102
  3. 八進位制(octal number system):八進位制為逢8進位的數字系統,由0、1、2、3、4、5、6、7所組成,通常於數字前加"&"或"&O"字母符號識別,例如&O467或4568
  4. 十六進位制(hexadecimal number system):十六進位制為逢16進位的數字系統,由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F所組成,其中A表十進位的10,B表 11,依次類推,其識別方式是於數前加"&H",例如&H123C,&HA28。或123C16
表一 各數字系統對照表

2.數字系統的轉換

(1) 十進位數轉換成二進位數
方法:
  1. 整數部份:將十進位整數連除以2,直到商數為0,再從下往上依次取出餘數。
  2. 小數部份:將十進位小數連乘以2,直到適當位數為止,從上往下依序取其整數
【例】43.62510        2
解:(a)整數部份
 (b)小數部份
(2).二進位數轉換成十進位數
方法:將2進位每一位數分別乘以其位值, 再把結果加起來即可。
【例】 101011.1012=       10
解:二進位數各位值如下:

3.二進位數的邏輯運算

邏輯運算是數學家布林(Boolean)根據數位邏輯閘所發展出來的,茲擇要列表如下:
表二 邏輯符號及相關說明
根據上表做一些練習如下:
解:

4.二進位數的算術運算

二進位數的算術運算以加、減、乘、除的四則運算,它的作法和十進位相近,只是二進位數在加法時滿2進1,在減法時借1當作2,其餘相同,列表如下:

5.補數的運算

接著,從邏輯電路的觀念來了解一下電路是如何進行相加的。首先寫出「被加數+加數=和、進位」的真值表如下圖(a)所示,其中和的真值表是XOR閘的關係,進位則是AND的關係,進而劃出電路圖如下圖(c)所示。
被加數A加數B和S進位C
0000
0110
1010
1101
(a)真值表
此圖是一個最基本的加法電路,必須要有兩個這種電路才能執行一個完全的加法(包括上一個的進位也必須加進來),在電腦內為了簡化電路,因此是以加法器為基本運算單元,減法時以加補數方式進行,乘法則是連加、除法是連加補數,都是以加法方式完成的,何謂補數呢?補數又如何來完成減法呢?
所謂補數(Complement)是指兩個數字加起來等於某數時,則稱該二數互為某數的補數;例如3的10補數為7,同理7的10補數為3。而補數有助減法運算用加法器來執行。例如4的十進位補數為6,故:
對二進位而言有1補數系統和2補數系統兩個。
(1) 1的補數系統(1's Complement):1補數系統是指兩數之和為1,則此兩數互為1的補數,亦即0和1互為1的補數。換言之,欲求得二進位數的1補數,只需將0變成1,1變成0即可;例如10102 的1補數為01012
(2) 2的補數系統(2's Complement):2補數系統的求法是先取該數的1補數,再加1即可,如下例:
【例】求0100之2補數
解:
以2補數法求兩數相減的步驟如下:
  1. 取減數的2補數。
  2. 和被減數相加。
  3. 相加後會產生有無溢位問題,再分別處理:
  4. 若沒有溢位,表示其結果為負值,再取此結果的2補數,才能得到正確的答案。
  5. 若發生溢位,表示其結果為正值,則將此溢位捨棄,即得正確的答案。
【例】以2補數求1101-0100 =      2
解:

16位元錯誤更正漢明碼


漢明碼

維基百科,自由的百科全書
漢明碼(Hamming Code),是在電信領域的一種線性偵錯碼,以發明者Richard Hamming的名字命名。漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於內存(RAM)。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。因此,當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於1時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。
在數學方面,漢明碼是一種二元線性碼。對於每一個整數m>2,存在一個編碼,帶有m個奇偶校驗位2^m-m-1個資料位。該奇偶檢驗矩陣的漢明碼是通過列出所有米欄的長度是兩兩獨立 。

目錄

  [隱藏

[編輯]歷史

1940年,漢明於貝爾實驗室(Bell Labs)工作,運用貝爾模型V(Bell Model V)電腦,一個週期時間在幾秒鐘內的機電繼電器機器。輸入端是依靠打孔卡(Punched Card),這不免有些讀取錯誤。在平日,特殊代碼將發現錯誤和閃燈(flash lights),使得操作者能夠糾正這個錯誤。在週末和下班期間,在沒有操作者的情況下,機器簡單的轉移到下一個工作。
漢明在週末工作,他對於不可靠的讀卡機總是必須重新開始專案變得愈來愈沮喪。在接下來的幾年中,他為了解決偵錯的問題,開發了功能日益強大的偵錯演算法。在1950年,他發表了至今所稱的漢明碼。現在漢明碼有著廣泛的應用。

[編輯]漢明碼之前

有多種檢查錯誤的編碼方式在漢明碼出現之前被使用,但是沒有一個可以在和漢明碼相同空間消耗的情況下,得到相等的效果。

[編輯]奇偶

奇偶校驗是一種添加一個奇偶位用來指示之前的資料中包含有奇數還是偶數個1的檢驗方式。如果在傳輸的過程中,有奇數個發生了改變,那麼這個錯誤將被檢測出來(注意奇偶位本身也可能改變)。一般來說,如果資料中包含有奇數個1的話,則將奇偶位設定為1;反之,如果資料中有偶數個1的話,則將奇偶位設定為0。換句話說,原始資料和奇偶位組成的新資料中,將總共包含偶數個1.
奇偶校驗並不十分健壯,如果資料中有偶數個位發生變化,則奇偶位仍將是正確的,因此不能檢測出錯誤。而且,即使奇偶校驗檢測出了錯誤,他也不可以指出哪一位出現了錯誤,從而進行更正。資料必須整體丟棄並且重新傳輸。在一個噪音較大的媒介中,成功傳輸資料可能需要很長時間或者不可能完成。雖然奇偶校驗的效果不佳,但是由於他只需要一位額外的空間開銷,因此這是開銷最小的檢測方式。並且,如果知道了發生錯誤的位,奇偶校驗還可以恢複數據。

[編輯]漢明碼

如果一條訊息中包含更多用於糾錯的位,且透過妥善安排這些糾錯位使得不同的出錯位產生不同的錯誤結果,那麼我們就可以找出出錯位了。在一個7位的訊息中,單個位出錯有7種可能,因此3個錯誤控制位就足以確定是否出錯及哪一位出錯了。
漢名研究了包括五取二碼在內的編碼方案,並歸納了他們的想法。

[編輯]通用演算法

下列通用演算法可以為任意位數位產生一個可以糾錯一位(英語Single Error Correcting)的漢明碼。
  1. 從1開始給數字的數據位(從左向右)標上序號, 1,2,3,4,5...
  2. 將這些資料位的位置序號轉換為二進制, 1, 10, 11, 100, 101, 等.
  3. 資料位的位置序號中所有為二的冪次方的位(編號1,2,4,8,等,即資料位位置序號的二進制表示中只有一個1)是校驗位
  4. 所有其它位置的資料位(資料位位置序號的二進制表示中至少2個是1)是資料位
  5. 每一位的資料包含在特定的兩個或兩個以上的校驗位中,這些校驗位取決於這些資料位的位置數值的二進制表示
    1. 校驗位 1 覆蓋了所有資料位位置序號的二進制表示倒數第一位是1的資料:1(校驗位自身,這裡都是二進制,下同),11,101,111,1001,等
    2. 校驗位 2 覆蓋了所有資料位位置序號的二進制表示倒數第二位是1的資料:10(校驗位自身),11,110,111,1010,1011,等
    3. 校驗位 4 覆蓋了所有資料位位置序號的二進制表示倒數第三位是1的資料:100(校驗位自身),101,110,111,1100,1101,1110,1111,等
    4. 校驗位 8 覆蓋了所有資料位位置序號的二進制表示倒數第四位是1的資料:1000(校驗位自身),1001,1010,1011,1100,1101,1110,1111,等
    5. 簡而言之,所有校驗位覆蓋了資料位置和該校驗位位置的二進制與的值不為0的數。
採用奇校驗還是偶校驗都是可行的。偶校驗從數學的角度看更簡單一些,但在實踐中並沒有區別。
校驗位一般的規律可以如下表示:
資料位位置1234567891011121314151617181920...
編碼後資料位置p1p2d1p4d2d3d4p8d5d6d7d8d9d10d11p16d12d13d14d15
奇偶校驗位
覆蓋率
p1XXXXXXXXXX
p2XXXXXXXXXX
p4XXXXXXXXX
p8XXXXXXXX
p16XXXXX
觀察上表可發現一個比較直觀的規律:第i個檢驗位是第2i-1位,從該位開始,檢驗2i-1位,跳過2i-1位……依次類推。例如上表中第3個檢驗位p4從第23-1=4位元開始,檢驗4、5、6、7共4位元,然後跳過8、9、10、11共4位元,再檢驗12、13、14、15共4位元……

[編輯]例子

對11000010進行漢明編碼,求編碼後的碼字。
1. 列出表格,從左往右(或從右往左)填入數位,但2的次方的位置不填。
位置1234567891011121314
資料11000010
2. 把資料行有的1的列的位置寫為二進制。
位置1234567891011121314
資料11000010
二進制001101011011
3. 收集所有二進制數位,求異或0011 \oplus 0101 \oplus 1011 =1101
4. 把1101依次填入表格中2的次方的位置。
位置1234567891011121314
資料11000010
二進制001101011011
校驗1101
5. 所以編碼後的碼字是111010010010。

2013年3月23日 星期六

二進位的浮點數表示法


浮點小數表示法:

所謂二進位的浮點小數表示法 (或是浮點數, floating point number) 簡單地講和我們十進位中常用的科學記號表示法是類似的, 十進位中我們用十的冪次 (power) 及 0 至 1 之間的小數來表示一個任意的實數, 例如:12345.6789 表示為 0.123456789 * 10^5。在二進位中我們一樣可以將一個二進位數字 1101110.11011 表示為 0.110111011011 * 2^7, 這樣子的表示法和定點表示法之間好像沒有什麼不同嘛!! 對!! 這兩個數值的大小當然是完全一樣的, 那為什麼要用浮點表示法呢?? 請注意在定點小數表示法之中我們看到它的缺點是絕對值太大的數字會被截斷 (正確的名稱是溢位,overflow) 位數不夠多無法表達大於範圍的數字, 絕對值太小的數 (例如:0.000000001) 也會被截斷 (正確的名稱是無條件捨去,truncation) 只能表達近似的值。
如果是這樣子的話,不知道你有沒有想過...

  1. 對於一個很大的數字 (例如 123456789012) 定點表示法保証小數點以後一定有固定的幾個位數來表示, (例如 123456789012.00000011) 可是這樣子的精確度對於大部份的應用來說是沒什麼意義的, 試想太陽到地球的距離多一公里少一公里真的有關係嗎?? 光速每秒鐘快一公尺又何妨??
  2. 對於一個很小的數字 (例如 0.0000000012) 來說定點表示法可能因為小數點後沒有足夠的位數來記錄而將其省略, 上面這個數字就變成 0 了。 如果你說水中含有 0.0000000012 莫耳的氰化鈉, 因為小數點後位數不足而把它當為 0, 這不太好吧!!
這時浮點數表示法就有它的妙用了, 以第一例中一個很大的數字而言: 浮點數由最重要的位數開始只保留一定的位數, 例如 123456789012.00000011 可用 .1234567890 * 10^12 來表示就夠了, 這個表達方法所記錄的數字和實際的數字會有誤差, 但是百分比誤差不大。 以第二例而言: 0.0000000012 可用 0.12 * 10^(-8) 來表示, 不需要浪費許多位元記錄 "0", 只需記 12 以及 -8 即可精確地表達這個很小的數字。
舉例來說, 一種簡單的二進位浮點表示法可以一個位元記錄正負號, 七個位元二的補數記錄 2 的冪次, 24 個位元記錄小數, 共 32 位元, 如下圖:

若有一個以此種表示方法的二進位數值:
    0 0001110 110000000000000000000000
代表十進位的 0.75 * 2^14 這個數字。注意
    和前面的定點小數表示法一樣, 浮點小數表示法在表達任意一個小數的時候, 也常常會有一些誤差, 而且實際所表示的數字的絕對值會小於或是等於原來希望表達的那個數字的絕對值。

2013年3月9日 星期六

2013.03.08-進位制換算


數字系統
在電腦領域常用的數制
1.二進位數制:電腦內部是以二進位的形式來儲存及處理資料。
2.十進位數制:人類日常生活中常用的數制。
3.八進位數制與十六進位數制:電腦中所用的二進位制可以轉換為八進位制與十六進位制,以方便使用者檢視電腦內部的資料。
數制的基本特性
1.各數制使用的符號個數與數制本身的基數相同;例如十進位制的基數為10,二進位制的基數為2
(1)十進位制:使用符號共10個,包括:0123456789
(2)二進位制:使用符號共2個,為01
(3)八進位制:使用符號共8個,包括:01234567
(4)十六進位制:使用符號共16個,包括:0123456789ABCDEF
2.人類常以一連串的數字符號表示一個數值,每一個數字符號會隨著它所在位置的不同,而有不同的位值。
3.高一位的位值是低一位的位值乘以其基數。例如在十進位制中101100的高一位,而101 = 100 ×10,其中10便是此數字系統的基數。
4.一串數字所代表的值,是各個數字符號所代表的數值乘以其位值的總和。
常用的數制說明
1. 十進位數制:
(1)10為基數、逢10進位的數制。
(2)使用的符號:0123456789
(3)位值:
        整數→10n10n-1……、103102101100
        小數→10-110-2、……10-m
2. 二進位數制:
(1)2為基數,逢2進位的數制。
(2)使用的符號:01
(3)位值:
        整數→2n2n-1……、23222120
        小數→2-12-2、……2-m
3. 八進位數制:
(1)8為基數,逢8進位的數制。
(2)使用的符號:01234567
(3)位值:
整數→8n8n-1……、83828180
小數→8-18-2……8-m
4.十六進位數制:
(1)16為基數,逢16進位的數制。
(2)使用的符號:0~9ABCDEF,其中A代表10B代表11C代表12D代表13E代表14F代表15
(3)位值:
        整數→16n16n-1……、163162161160
    小數→16-116-2……16-m
各數制的對照表
十進位數
二進位數
八進位數
十六進位數
0
0000
0
0
1
0001
1
1
2
0010
2
2
3
0011
3
3
4
0100
4
4
5
0101
5
5
6
0110
6
6
7
0111
7
7
8
1000
10
8
9
1001
11
9
10
1010
12
A
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F
十進位轉換成二進位、八進位、十六進位
1.整數部分轉換方式:
(1)將該數連續以要轉換的數制之基數,直到商為0為止。
(2)由下往上取每次相除所得的餘數。
2.小數部分轉換方式:
(1) 遇到帶有小數的數字,將小數點後的數字乘以要轉換的數制之基數,再將所得乘積小數點後的數字乘以要轉換的數制之基數,如此重複直到小數點後的數字全部為0時停止。
(2)由上而下取每次相乘所得的整數。
二進位轉換成十進位、八進位、十六進位
1.二進位轉換成十進位:
(1)將每一個二進位數乘以該數的位值。
(2)將所有相乘所得的結果相加。
2.二進位轉換成八進位:
(1)正規法:先將二進位轉換成十進位,再將十進位轉換為八進位。
(2)快速法:將二進位數每三個一組轉換成相對應的八進位數,分組時若不足三位,整數部分是左邊補0;小數部分則是右邊補0
        000 = 0     001 = 1     010 = 2     011 = 3
        100 = 4     101 = 5     110 = 6     111 = 7
4. 二進位轉換成十六進位:
(1)正規法:先將二進位轉換成十進位,再將十進位轉換為十六進位。
(2)快速法:將二進位數每四個一組轉換成相對應的十六進位數,分組時若不足四位,整數部分是左邊補0;小數部分則是右邊補0
        0001 = 1     0010 = 2     0011 = 3     0100 = 4
    0101 = 5     0110 = 6     0111 = 7     1000 = 8
    1001 = 9     1010 = A     1011 = B    1100 = C
    1101 = D     1110 = E     1111 = F
八進位和十六進位互轉換
1.八進位轉換成十六進位:
(1)正規法:先將八進位轉換成十進位,再將十進位轉換為十六進位。
(2)快速法:將八進位數轉換成三個一組的二進位數,再將二進位數每四個一組轉換成相對應的十六進位。
2.十六進位轉換成八進位:
(1)正規法:先將十六進位轉換成十進位,再將十進位轉換為八進位。
(2)快速法:將十六進位數轉換成四個一組的二進位數,再將二進位數每三個一組轉換成相對應的八進位數。
數制的加減運算
1.2進位、8進位、10進位、16進位,這些數制系統的加減原則皆相同。
2.當相加所得的值超出數制的基數 (溢位) ,就必須向上進位;反之,如果被減數小於減數則須向上借位。