570 likes | 885 Views
第 2 章 數字系統與電腦資料表示法. 2-1 數字系統簡介 2-2 數字系統轉換方式 2-3 數字系統的運算 2-4 整數的正負數表示法 2-5 小數表示法 2-6 電腦與編碼系統 2-7 資料偵錯碼. 十進位數字系統. 2-1 數字系統簡介. 在十進位數字系統中,共使用 0~9 十個符號的組合來表示所有可能的數字,並且以 10 為基底。 每一個符號的位置代表數字 10 的乘冪,由右至左數字位置的乘冪分別為 10 0 、 10 1 、 10 2 … ,其餘以此類推,所以可知十進位數字 5210 10 可以看成:. 二進位數字系統.
E N D
第2章 數字系統與電腦資料表示法 2-1 數字系統簡介 2-2 數字系統轉換方式 2-3 數字系統的運算 2-4 整數的正負數表示法 2-5 小數表示法 2-6 電腦與編碼系統 2-7 資料偵錯碼
十進位數字系統 2-1 數字系統簡介 • 在十進位數字系統中,共使用0~9十個符號的組合來表示所有可能的數字,並且以10為基底。 • 每一個符號的位置代表數字10的乘冪,由右至左數字位置的乘冪分別為100、101、102…,其餘以此類推,所以可知十進位數字521010可以看成:
二進位數字系統 2-1 數字系統簡介 • 在電腦中只有0與1兩個符號,用0與1的符號組合來表示任何一個數字、字元、符號及資料,以2為基底,每一個符號的位置代表數字2的乘冪,由右至左數字位置的乘冪分別為20、21、22…,因此可得知二進位數字10101可以看成:
四進位數字系統 2-1 數字系統簡介 • 四進位數字系統以4為基底,共使用0~3四個符號的組合來表示所有可能的數字,每一個符號的位置代表數字4的乘冪,由右至左數字位置的乘冪分別為40、41、42…,例如4進位數字3214可以看成:
八進位數字系統 2-1 數字系統簡介 • 八進位數字系統以8為基底,共使用0~7八個符號的組合來表示所有可能的數字,每一個符號的位置代表數字8的乘冪,由右至左數字位置的乘冪分別為80、81、82…,例如8進位數字2108可以看成:
十六進位數字系統(1) 2-1 數字系統簡介 • 十六進位數字系統以16為基底,共使用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等十六個符號的組合來表示所有可能的數字,其中A代表10、B代表11…、F代表15。 • 每一個符號的位置代表數字16的乘冪,由右至左數字位置的乘冪分別為160、161、162…,例如16進位數字3F816可以看成:
十六進位數字系統(2) 2-1 數字系統簡介
非十進位轉成十進位(1) 2-2 數字系統轉換方式 • 「非十進位轉成十進位」的轉換方式最為簡單,首先是將整數與小數部份分開處理。 • 例如八進位轉換成十進位,可將整數部份以8進位數值乘上相對的8正次方值,例如8進位整數右邊第一位的值乘以80,往左算起第二位的值乘以81,依此類推,最後再將其加總。 • 至於小數的部份,則以8進位數值乘上相對的8負次方值,依此類推,最後再加總起來。
非十進位轉成十進位(2) 2-2 數字系統轉換方式 • 二進位、十六進位轉換成十進位的方法都相當類似。如下例所示: 1.112=1*20+1*2-1+1*2-2=0.5+0.25=1.7510 11.1012=1*21+1*20+1*2-1+0*2-2+1*2-3=3.62510 328=3*81+2*80=2610 163.78=1*82+6*81+3*80+7*8-1=115.87510 A1D16=A*162+1*161+D*160 =10*162+1*16+13 =258910 5AC.216 =5*162+A*161 + C * 16 0 + 2 * 16 - 1 =10*16+12+0.125 =1452.12510
十進位轉換成非十進位(1) 2-2 數字系統轉換方式 • (1). 十進位轉換成二進位
十進位轉換成非十進位(2) 2-2 數字系統轉換方式 • (2) 十進位轉換成八進位
十進位轉換成非十進位(3) 2-2 數字系統轉換方式 • (3)十進位轉換成十六進位
非十進位轉換成非十進位(1) 2-2 數字系統轉換方式 • 二進位→八進位 • 首先請將二進位的數字,以小數點為基準,小數點左側的整數部份由右向左,每三位打一逗點,不足三位則請在其左側補足0。 • 小數右側的小數部份由左向右,每三位打一逗點,不足三位則請在其右側補足0,接著將每三位二進數字換成八進位數字,即成八進制。
2-2 數字系統轉換方式 • 例如將1011111.011012換算成八進位:
非十進位轉換成非十進位(2) 2-2 數字系統轉換方式 • 二進位→十六進位 • 將二進位的數字,以小數點為基準,小數點左側的整數部分由右向左,每四位打上一個逗點,不足四位則請在其左側補足0。 • 小數點右側的小數部分由左向右,每四位打一個逗點,不足四位則請在其右側補足0。 • 接著把每四位二進數字,換成十六進位數字,即成十六進制。
2-2 數字系統轉換方式 • 例如將1011111.01101換算成十六進位:
加法運算(1) 2-3 數字系統的運算 • 在任何的數字系統中要進行相加的動作,首要工作就是將相加的兩數轉換成相同的基底,至於其加法過程則和數學運算中的十進位加法運算類似,其作法如下: • 首先將要相加的兩數最右邊的位數靠右對齊,接著從最右邊的位數開始進行相加的動作,如果相加之後的結果小於基底值,則此相加的和即為該位數的相加結果,但是如果相加之後的結果大於或等於基底值,則必須將此結果值先除以基底值,其餘數為該位數的相加結果,但商數則為進位,和數學的加法一樣,必須和下一個位數相加,最右邊的數位相加完畢後,再進行右邊算起第二位的加法運算,其作法和上述一致。
加法運算(2) 2-3 數字系統的運算 • 範例: • (C2D)16+(45A)16=( )16 • 因此,本例最後的相加結果為 • (C2D)16+(45A)16=(1087)16 解答: 1.先進行最右邊位數的相加,D16+A16=2310 接著將23除以基底16,得到餘數為7,商數為1,請將商數進位到下一個位數,而餘數7則為此位數的相加結果。 2.將右邊算起第二位數相加,請記得要一併加入剛才的進位,其結果為116+216+516=816 由於8小於基底16,故此數為此位數的相加結果 3.進行第三位數的相加,C16+416=1610 接著將16除以基底16,得到餘數為0,商數為1,請將商數進位到下一個位數,而餘數0則為此位數的相加結果。
減法運算(1) 2-3 數字系統的運算 • 在任何的數字系統中要進行減法的動作,首要工作就是將相減的兩數轉換成相同的基底,至於其加法過程則和數學運算中的十進位減法運算類似,其作法如下: • 首先將要相減的兩數最右邊的位數靠右對齊,接著從最右邊的位數開始進行減法的動作,如果被減數大於或等於基底值,則直接相減,所得的結果為該位數的運算結果,但如果被減數小於減數,則必須將左邊的位數借位。
減法運算(2) 2-3 數字系統的運算 • 範例: • (C2D)16-(45A)16=( )16 • 1.先進行最右邊位數的相減,D16-A16=310 • 為此位數的相減的結果。 • 2.將右邊算起第二位數相減,由於216<516,必須向左邊借位,因為基底為16,一次借位的值為16,計算結果為16+2-5=1310=D16 • 3.C被借了一位後,只剩B,再將B16-416=1110-410=710=716 • 因此,本例最後的相減結果為 • (C2D)16-(45A)16=(7D3)16
乘法運算(1) 2-3 數字系統的運算 • 在任何的數字系統中要進行乘法的動作,首要工作就是將乘法的兩數轉換成相同的基底,如果為了方便計算,建議可以先將被乘數與乘數先行轉換成十進位,再依十進位的基底下進行相乘的動作,完後相乘的結果值,再依本節所討論的十進位轉換成非十進位的作法,轉換成原來的基底,不過,如果所進行乘法的基底為2,則建議無需轉換成十進位,直接進行乘法計算即可,底下我們將以一個八進位的兩位數進行乘法的範例來加以說明,其作法如下:
乘法運算(2) 2-3 數字系統的運算 • 範例: • 請計算528*738=()8 解答: 其計算過程如下: 528*738=4210*5910=247810=46568
除法運算(1) 2-3 數字系統的運算 • 在任何的數字系統中要進行除法的動作,首要工作就是將要進行除法的兩數轉換成相同的基底,如果為了方便計算,建議可以先將被除數與除數先行轉換成十進位,再依十進位的基底下進行相除的動作,完後相除的結果值,再依本節所討論的十進位轉換成非十進位的作法,分別將相除之後的商數與餘數分別轉換成原來的基底,不過,如果所進行除法的基底為2,則建議無需轉換成十進位,直接進行除法計算即可,底下我們將以一個八進位的兩位數進行乘法的範例來加以說明,其作法如下:
除法運算(2) 2-3 數字系統的運算 • 範例: • 請計算3258/78=()8 解答: 其計算過程如下: 3258/78 =(3*82+2*8+5)10 / 710 =(192+16+5)10 /710 =21310/710=3010餘310 分別將商數及餘數轉換成8進位,得到的結果是 商數為3010=368 餘數為310=38
整數的正負數表示法(1) 2-4 整數的正負數表示法 • 不帶號整數 • 不帶號整數通常以一個位元組(byte),也就是8個位元(bit)表示,而且沒有符號位元,不帶號整數在電腦記憶體中的儲存格式如下: • 例如:使用8位元的不帶號整數的資料表示法,數字1510在記憶體的表示方式如下: • 1510=11112
2-4 整數的正負數表示法 • 同理,換一個角度,如果記憶體內有一個不帶號整數的表示方式如下,請試著將其轉換10進位的數字: • 根據上圖可以得到此數為: • 1*27+1*26+1*25+1*24+1+21+10=128+64+32+16+2+1=243 • 以8位元為例,不帶號整數的數值範圍為0~28-1,即0~255 • 同理,如果資料是以n位元表示,則不帶號整數的數值範圍為0~2n-1
整數的正負數表示法(2) 2-4 整數的正負數表示法 • 帶號整數 • 所謂帶號整數是指有正負號的數值,通常帶號整數以2位元組(即16Bits)表示,並使用1個位元來作為符號位元,符號位元為0代表數值為正,符號位元為1代表數值為負,其餘位元則用來表示數值,帶號整數在電腦記憶體中的儲存格式如下:
2-4 整數的正負數表示法 • 例如:使用16位元的帶號整數的資料表示法,數字1510在記憶體的表示方式如下: • 1510=11112 • 至於負整數的表示方式除了帶號大小值法(Sign Magnitude)外,還有1’s補數(1’s Complement)及2’s補數(2’s Complement)兩種,總共三種表示方式。
補數的計算(1) 2-4 整數的正負數表示法 • N-1的補數 • 某數值其(N-1)的補數的計算法式,是將(N-1)分別減去該數值所有的位數,所計算而得的結果即為該數值(N-1)的補數。 • 範例: • 當N=8時,試求36548之7的補數為何? 解答: 請以N-1=8-1=7,分別減去該數值所有的位數,得到的結果值為41238,此值即為36548之7的補數。
補數的計算(2) 2-4 整數的正負數表示法 • N的補數 • 某數值其N的補數的計算法式,是將該數值(N-1)的補數再加1,所計算而得的結果即為該數值N的補數。 • 範例 • 當N=8時,試求36548之8的補數為何? 解答: 首先求取36548之7的補數,請以N-1=8-1=7,分別減去該數值所有的位數,得到的結果值為41238,此值即為36548之7的補數。 得到36548之7的補數後,再將該7的補數的最小位元再加1,就是該數值之8的補數,此例就是41238+18=41248
補數的計算(3) 2-4 整數的正負數表示法 • 帶號大小值法 • 帶號大小值法(Sign Magnitude)就是以最左邊的位元來表示正負號,例如以N位元表示一個整數,最左邊一位元代表正負號,其餘N-1位元表示該數值,則此數的變化範圍在-2N-1-1~ +2N-1-1。例如±3的表示法:
補數的計算(4) 2-4 整數的正負數表示法 • 1’s補數法 • 「1’s補數系統」是指如果兩數之和為1,則此兩數互為1的補數,亦即0和1互為1的補數。而1 's 補數法(1's Complement)仍是以最左邊的位元來表示正負號,當表示負數時,由0變成1,而1則變成0即可。例如我們使用8個位元來表示正負整數,那麼127=(01111111)2,則其「1 's補數」即為(10000000)2=-127。不過這種表示法對於0的表示法還是有兩種,即+0=(00000000)2,-0=(11111111)2,,因此如帶號大小值法一樣,並無法在電腦中實際使用。
補數的計算(5) 2-4 整數的正負數表示法 • 2’s補數法 • 這就是目前電腦所採用的表示法,而且0的正負數表示法只有一種。「2’s補數系統」的作法則是必須事先求出該數的1’s補數,再加1即為該數的負數。例如127=(01111111)2的「1´s補數」為(10000000)2=-127,其「2’s補數」則為(10000001)2:
2-4 整數的正負數表示法 • 範例 • 求取1100110112之1的補數及2的補數分別為何? 解答: 要求1100110112之1的補數只要將1變成0,0變成1即可,所以其1的補數為0011001002,而1100110112之2的補數則為其1的補數再加1即可,所以其1100110112之2的補數為0011001002再加1,即0011001012。
利用補數進行減法運算(1) 2-4 整數的正負數表示法 • 1的補數 • 1.如果有進位,表示結果為正,這個時候就必須將計算的結果(不含進位的位元)再加上1,即最小的位元再加上1。 • 2.但如果沒有進位,表示計算的結果為負,這個時候就必須先求取該計算的結果之1的補數,並將該值的前面加上一個負號,就是兩數相減的結果。
2-4 整數的正負數表示法 • 範例 • 請分別將十進制中的3210及1310分別轉換成二進位制,再以1的補數的方式,來進行3210-1310的執行結果。 解答: 首先請將3210及1310分別轉換成二進位制,得到的值分別為1000002及11012,這裡由於被減數與減數位數不一致,所以在計算其1的補數前必須先行調整成相同的位數,即1310請用0011012表示。 接著求取減數0011012之1的補數,即1100102 將1000002+1100102=10100102
2-4 整數的正負數表示法 • 範例 • 請分別將十進制中的1310及3210分別轉換成二進位制,再以1的補數的方式,來進行1310-3210的執行結果。 解答: 首先請將1310及3210分別轉換成二進位制,得到的值分別為11012及1000002,這裡由於被減數與減數位數不一致,所以在計算其1的補數前必須先行調整成相同的位數,所以請將此例中的被減數1310用0011012表示。 接著求取減數1000002之1的補數,即0111112 將0011012+0111112=1011002
利用補數進行減法運算(2) 2-4 整數的正負數表示法 • 2的補數 • 首先求取減數之2的補數,接著將被減數加上減數之2的補數,所得到的結果值再依是否有進位,執行以下的修正: • 1.如果有進位,表示結果為正,而這個結果值(不含進位的位元)就是兩數相減的結果。 • 2.但如果沒有進位,表示計算的結果為負,這個時候就必須先求取該計算的結果之2的補數,並將該值的前面加上一個負號,就是兩數相減的結果。
2-4 整數的正負數表示法 • 範例 • 請分別將十進制中的3210及1310分別轉換成二進位制,再以2的補數的方式,來進行3210-1310的執行結果。 解答: 首先請將3210及1310分別轉換成二進位制,得到的值分別為1000002及11012,這裡由於被減數與減數位數不一致,所以在計算其2的補數前必須先行調整成相同的位數,即1310請用0011012表示。 接著求取減數0011012之2的補數,即其1的補數再加1,即1100102+1=1100112 將1000002+1100112=10100112
2-4 整數的正負數表示法 • 範例 • 請分別將十進制中的1310及3210分別轉換成二進位制,再以2的補數的方式,來進行1310-3210的執行結果。 解答: 首先請將1310及3210分別轉換成二進位制,得到的值分別為11012及1000002,這裡由於被減數與減數位數不一致,所以在計算其2的補數前必須先行調整成相同的位數,所以請將此例中的被減數1310用0011012表示。 接著求取減數1000002之2的補數,即其1的補數再加1,即0111112+1=1000002 將0011012+1000002=1011012
浮點數表示法(1) 2-5 小數表示法 • 浮點數表示法就是數學常見的科學符號表示法,浮點數表示法的小數點位置則取決於精確度及數值而定,另外不同電腦型態的浮點數表示法也有所不同。想要表示電腦內部的浮點數必須先以正規化(Normalized Form)為其優先步驟。假設一數N能化成以下格式: N=S*L.F*be ,其中 S:符號位元,0代表正數,1代表負數 F:假數或稱小數(mantissa或fraction)部份 L: 起始位元(leading bit),十進位為0,二進位為1 e:指數(exponent)部份 b:基底(base)部份
浮點數表示法(2) 2-5 小數表示法 • 根據國際電機電子工程師協會(Institute of Electrical and Electronics Engineers IEEE)754標準制定浮點數在電腦內部的浮點數表示式(以單精度浮點表示法32位元為例),可用下圖來表示: • 其在計算機內部浮點數表示法如下:
倍精密度浮點表示法 2-5 小數表示法 • 至於倍精密度浮點表示法則需要兩個字組,即64位元來表示浮點數,可用下圖來表示: • 其在計算機內部浮點數表示法如下:
位元與位元組 2-6 電腦與編碼系統 • 當談論到電腦化的資料時,無論是開或是關,由每個開關狀態所表示的值稱為一個位元(bit),一個位元就可以表示兩種資料:0與1。而兩個位元則可以表達四種資料,即00、01、10、11,越多的位元則表示可以處理更多的資料,不過因為電腦所處理的資料相當龐大,所以又將八個位元組合成一個「位元組」(byte)。 • 當電腦操作者利用鍵盤輸入資料時,無論是數字或字元資料,電腦都會將其轉換成二進位形式,並以二進位碼來儲存,也就是將想儲存在電腦系統的符號一一編號,以位元組為單位儲存在電腦中,這就是編碼(Encoding) 系統的緣起。
2-6 電腦與編碼系統 • 下表為單位和位元組之間的轉換關係對應表: • 由上表可以得知各單位間的關係式如下: 1 TB = 210 GB 1 GB = 210 MB 1 MB = 210 KB 1 KB = 210 B
編碼系統簡介(1) 2-6 電腦與編碼系統 • ASCII碼 • 因為當時一個位元組的大小只需7 個位元即可包含所有所需的資訊,總共可容納128個符號,到目前為止是所有類型的電腦中最為普遍。例如大寫字母「A」是由數值65表示,「B」是由數值66來表示,小寫字母「b」是由數值98來表示,「@」符號是由數值64來表示,「$」符號是由數值36來表示,「?」符號是由數值63來表示等。
編碼系統簡介(2) 2-6 電腦與編碼系統 • EBCDIC碼 • 後來有些電腦系統為了能夠處理更多的字元,如由IBM所發展的「擴展式BCD碼」(Extended Binary Coded Decimal Interchange Code, EBCDIC),原理乃採用8個位元來表示不同之字元,因此EBCDIC碼最多可表示256個不同字元,比ASCII碼多表示128個字元。例如EBCDIC編碼的'A'編碼11000001,'a'編碼為10000001。
編碼系統簡介(3) 2-6 電腦與編碼系統 • ISO8859碼 • 不過對於歐洲語系而言,7 個位元的編碼空間不符合所需,因為它們的語言中多了許多特殊字母與標示,因此將原來只有7個位元的編碼系統改為8個位元,這就是ISO8859編碼標準,為了與原先的編碼系統相容,0~127的編碼與ASCII相同,而之後則依不同的國家語系而有所不同。