1.19k likes | 1.23k Views
第二章. 電腦系統的資料表示法. 第二章 教學目的. 了解數字表示的基礎 ,以及在數位電腦中是如何處理的 熟悉不同進制間的轉換 . 了解如何因為溢位和截位而產生計算上的誤差. 第二章 教學目的. 熟悉一些常用的字元碼 了解是資料是如何儲存電腦記憶體 、 如何在電信線上傳輸 、 及如何儲存在磁碟上 , 這之間的差別為何 了解錯誤偵測和更正碼. 2.1 簡介. 電腦中資訊的最基本單位為 位元 ( bit ) 在數位電路中是一種 “on” 或 “ off” 的狀態 有時會稱為 “ high” or “low” 電壓 八個位元一組稱為位元組 ( byte)
E N D
第二章 電腦系統的資料表示法
第二章 教學目的 • 了解數字表示的基礎,以及在數位電腦中是如何處理的 • 熟悉不同進制間的轉換. • 了解如何因為溢位和截位而產生計算上的誤差
第二章 教學目的 • 熟悉一些常用的字元碼 • 了解是資料是如何儲存電腦記憶體、如何在電信線上傳輸、及如何儲存在磁碟上,這之間的差別為何 • 了解錯誤偵測和更正碼
2.1 簡介 • 電腦中資訊的最基本單位為位元(bit) • 在數位電路中是一種 “on” 或 “off” 的狀態 • 有時會稱為 “high” or “low” 電壓 • 八個位元一組稱為位元組(byte) • byte 是電腦儲存的最小定址單位 • “定址” 表示在記憶體中能被擷取的某特定byte所在的位置
2.1 簡介 • word是一組 bytes 所構成 • Words 可以是任意的 bits 或 bytes. • Word 的大小通常是 16, 32, or 64 bits • 在 word-定址系統中,word 是最小的可定址儲存單位. • 四個 bits 一組稱為nibble (或 nybble). • 所以Byte是由二個nibbles所組成:一個 “high-order nibble,” 和 一個“low-order” nibble
2.2 定位式數字系統 • 在bytes儲存數字時,每個bit都是2的次方 • 這樣的二進制系統又稱為base-2 系統. • 平常的十進制系統為 base-10 系統。每個數字都是十的次方 • 任何的整數都可以用任何底數來表式 (或 基數).
2.2 定位式數字系統 • 十進制 947 以10的次方分解來看: • 十進制 5836.47以10的次方分解來看: • 9 10 2 + 4 10 1 + 7 10 0 • 5 10 3 + 8 10 2 + 3 10 1 + 6 10 0 • + 4 10 -1 + 7 10 -2
2.2 定位式數字系統 • 二進制 11001 以2的次方分解來看: • 當基數不是10為底時,會在數字附上下標 • 但是有時也會加上10來強調: 110012 = 2510 • 1 2 4 + 1 2 3 + 0 2 2 + 0 2 1 + 1 2 0 • = 16 + 8 + 0 + 0 + 1 = 25
2.3 十進制對二進制的轉換 • 因為在數位電腦系統中,二進制是所有資料表示法的基礎,所以你必需很熟練才行 • 你在二進制數字系統所學到的知識會讓你了解到所有電腦組件的運作,以及指令集架構是如何設計的
2.3 十進制對二進制的轉換 • 在前面的投影片中我們說到,任何整數都可以用某種進制來唯一表示。 • 你可以有二種方式來進行不同進制間的轉換:一種是減法,一種是除餘法。 • 減法比較直覺,但是很煩雜。但是它會加強你對基數背後的數學觀念。
假設我們要將十進制的190轉換成三進制 我們知道 3 5 = 243 所以我們的結果會少於6個位元。我們需要最大3的次方為 3 4 = 81, 並且 81 2 = 162. 將 2寫下並將192減去162,得到。 2.3 十進制對二進制的轉換
將 190 轉換成以3為底... 下一個3的次方為 3 3 = 27。我們用28減去27並寫下1為我們要的結果 下一個3的次方3 2 = 9, 結果太大了,, 但是我們必需空一個位置放0,將1傳下去 2.3 十進制對二進制的轉換
將 190 轉換成以3為底... 3 1 = 3 再一次太大了,所以我們再放0. 3的最後次方, 3 0 = 1, 是我們最後的選擇,產生了不是0的結果 從上往下讀取結果為: 19010 = 210013 2.3 十進制對二進制的轉換
2.3 十進制對二進制的轉換 • 另一種轉換的方式是用除法 • 這種方式比較機械化並且較簡單 • 它的原理是用連除以要轉換的基底和連減該基底的次方是一樣的道理 • 我們這次用除餘法來轉換十進制 190 為基底 3
將 190 轉換成以3為底... 首先我們將欲轉換的數除以要轉過去的基底 在此例中,190可以被 3 除 63 次,最後餘1 將商和餘數記錄下來 2.3 十進制對二進制的轉換
將 190 轉換成以3為底... 63 能被 3整除 我們的餘數為0,商為21 2.3 十進制對二進制的轉換
將 190 轉換成以3為底... 一直重覆直到商為0. 最後,我們發現2除以3的商為0 從下往上讀取結果: 19010 = 210013 2.3 十進制對二進制的轉換
2.3 十進制對二進制的轉換 • 在所有基數系統分數都可以約略的表示. • 不同與整數,分數並不盡然能在所有的基數系統中精確的表示出來 • ½在二進制和十進制就能精確的表示,但是在三進制系統就沒辦法,只能趨近
2.3 十進制對二進制的轉換 • 十進制分數在小數點右邊會有非零的數字 • 其它基數的分數在基數點的右邊會有非零的數字 • 基數點的右邊表示該基數的負次方: • 0.4710 = 4 10 -1 + 7 10 -2 • 0.112 = 1 2 -1 + 1 2 -2 • = ½ + ¼ • = 0.5+ 0.25 = 0.75
2.3 十進制對二進制的轉換 • 要轉換整個數字,我們可以其中一種方法:減法和簡易乘法來完成 • 以減法來說,減法對分數也是一樣的,只是在分數部份要減的是基數的負次方 • 我們從最大的分數開始, n -1, 這邊n是我們的基數,然後一直到最大的負次方
右邊是一個用減法將十進制 0.8125 轉換成二進制的方法 從上往下讀取結果 : 0.812510 = 0.11012 這適用各種基數,不只是二進制 2.3 十進制對二進制的轉換
使用乘法來轉換,我們將數目乘以基數2. 第一個乘積產生了整數部份. 2.3 十進制對二進制的轉換
將 0.8125轉換成二進制 . . . 在每一步驟省略掉整數部份,然後將分數部份乘上基數. 2.3 十進制對二進制的轉換
將 0.8125轉換成二進制 . . . 當乘積為0的時候就完成了,或者達到了你想要的小數位數 從上到下讀取結果: 0.812510 = 0.11012 這種方法也適用於各種基數. 只要將數字乘上要轉換的基數即可 2.3 十進制對二進制的轉換
2.3 十進制對二進制的轉換 • 對數位電腦來說,二進制數字系統是最重要的. • 然而,要讀一大串的二進制數是相當困難的–不用很大的十進位數也會是很大的二進制數字 • 例如: 110101000110112 = 1359510 • 為了精簡並容易讀取,二進制數通常會用十六進制來表示
2.3 十進制對二進制的轉換 • The hexadecimal numbering system uses the numerals 0 through 9 and the letters A through F. • The decimal number 12 is B16. • The decimal number 26 is 1A16. • It is easy to convert between base 16 and base 2, because 16 = 24. • Thus, to convert from binary to hexadecimal, all we need to do is group the binary digits into groups of four. A group of four binary digits is called a hextet
2.3 十進制對二進制的轉換 • 將四個一組,二進制 110101000110112 (= 1359510) 的十六進制為: • 八進制數可以藉著將二進制數三個位元一組求得 (8 = 23): 當電腦用六位元當字組時,八進制就很有用
2.4 Signed Integer Representation • 到目前為止我們只考慮正數的轉換 • 為了要表示負數,電腦系統需要一個高位元來分辨數值的正負號 • 該位元在 byte 的最左邊。也稱為 most significant bit • 剩下的bits 就是數字的值
2.4 有號整數表示法 • 有號二元數的表示法有三種: • 符號大小表示法 Signed magnitude • 1補數表示法 One’s complement • 2補數表示法 Two’s complement • 在一個 8-bit 字組中,符號大小表示法將數值放在符號位元右邊的7 bits
2.4 有號整數表示法 • 例如,在 8-bit 浮號大小表示法中,正 3 為:00000011 • 負 3 為:10000011 • 電腦在符號大小表示法上做算術運算跟人用手算的方式很相似 • 我們在計算時通常會先忽略運算元的符號,在計算完後再將上正負號
2.4 有號整數表示法 • 二進制的加法非常簡單。只有四種規則: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 • 因為如此的簡單,所以數位電路很容易實行算術運算 • 我們會在第三章介紹這些電路 我們來看看這些加法規則如何用在符號大小表示法 . . .
2.4 有號整數表示法 • 範例: • 請用符號二元數表示法來計算 75 和 46 的和 • 首先我們將 75 和 46 轉換為二進制,然後調整位置,將(正)符號位元和數值分開
2.4 有號整數表示法 • 範例: • 請用符號二元數表示法來計算 75 和 46 的和 • 如同十進制運算般,我們從最右邊的位元開始加到左邊
2.4 有號整數表示法 • 範例: • 請用符號二元數表示法來計算 75 和 46 的和 • 在第二個 bit,我們產生了進位,所以我們標示到第三個 bit
2.4 有號整數表示法 • 範例: • 請用符號二元數表示法來計算 75 和 46 的和 • 第三和第四 bits 也產生進位
2.4 有號整數表示法 • 範例: • 請用符號二元數表示法來計算 75 和 46 的和 • 當我們做完八個 bits,答案就求出來了 這個例子有一點要非常小心的是,我們必須保證二個值的和不會大於7個bits所能表示的範圍。不然會有問題發生
2.4 有號整數表示法 • 範例: • 請用符號二元數表示法來計算 107 和 46的和 • 我們發現第七個位元的進位溢出(overflows)了, 而且被忽略掉,這使得答案變成是錯的:107 + 46 = 25
2.4 有號整數表示法 • 符號表示法中的浮號算起來跟紙筆運算方式很像。 • 例如: 用符號表示法二元運算來求 - 46 和 – 25的和 • 因為符號相同, 我們所要做的就是將數相加, 加完後再加上負號
2.4 有號整數表示法 • 正負數的相加 (或相減) 做法相同. • 範例:用符號表示法二元運算來求46 和 – 25的和 • 最後結果的大小和較大的數一致 • 注意第二和第六 bits 的 “借位”
2.4 有號整數表示法 • 對人們來說, 符號大小表示法非常容易了解, 但是電腦硬體會比較複雜 • 符號大小表示法的另一個缺點是它對0有二種表示方式:正零和負零 • 因為這樣, 電腦系統實際是用補數系統來表示數值
2.4 有號整數表示法 • 在不同的補數系統中, 負數的表示也會有所不同 • 在遞減基數補數系統中 (diminished radix complement systems), 負數是求自數的絕對值和少於基數1的差值 • 在二元系統中, 這就是1補數. 也就是將數的0跟1反向
2.4 有號整數表示法 • 例如, 在 8-bit 1補數的正 3 是: 00000011 • 負 3 是: 11111100 • 在1補數中, 如同符號表示法, 數的正負是由最高bit來判別的 • 補數系統非常有用, 因為它不需要特殊的電路來執行減法運算. 二個數的差值可藉由加上減數的補數來達成
2.4 有號整數表示法 • 在1補數加法, 進位會 “端迴” 並加到和去. • 例如:使用1補數二元運算求出48 和 – 19的和 • 注意19的二進制表示為00010011, 所以 -19 的1補數表示為: 11101100.
2.4 有號整數表示法 • 雖然 “端迴進位” 會增加複雜度, 但是1補數實作起來還是比符號大小方式簡單 • 但依舊有正零和負零的缺點 • 2補數解決了這個問題 • 2補數是二元數字系統的基數補數 (radix complement)
2.4 有號整數表示法 • 如何將值表示為2補數表示: • 如果數本身是正數, 只要轉換成二進制即可 • 如果數本身是負數數, 就求出1補數再加1 • 範例e: • 在8-bit 1補數中, 正3為: 00000011 • 負 3 在 1補數中為:11111100 • 加1變成-3的2補數:11111101.
2.4 有號整數表示法 • 在2補數的算術運算中, 我們只需將二個數相加. 不用去管高位元的進位. • 例如:用2補數算數運算求出48 和 – 19的和 • 19 的二進制為:00010011, • 所以 -19 的1補數為: 11101100, • 那 -19 的2補數就為: 11101101.
2.4 有號整數表示法 • 只要我們是用有現位元來表示數字,那就會有計算結果太大無法儲存的風險存在 • 然而我們不能只是預防溢位發生, 我們要能偵測溢位 • 在補數的算術運算中,溢位可以很容易的偵測
2.4 有號整數表示法 • 範例: • 用2補數二元運算求107和 46的和 • 我們發現第七位元有非零的進位發生, 這會產生錯誤的結果:107 + 46 = -103. 偵測2補數溢位的規則:當有進位到符號位元的進位和符號位元產生的進位不同時 , 就是發生溢位了.
2.5 浮點數表示法 • 前面的符號表示法, 1 補數及2補數表示法都只是在處理整數而已. • 不修改的話, 這些格式是無法用在科學或商業應用上的實數處理. • 浮點表示法就是為了解覺這些問.
2.5 浮點數表示法 • 如果我們對程式設計很熟悉的話, 那我們可以用任何的整數格式來進行浮點運算. • 這種方式就稱為浮點數模擬, 因為浮點數並不是照它的樣子被儲存, 我們只是用程式的方式來讓它看起來像是在用浮點數一般. • 今天大多數的電腦都會配有特殊硬體來處理浮點數的運算, 而不再需要程式設計師去操心了.