36
1 將 (185.625) 10 將將將將將將將 64 將將將將將將將將將S 將將 將將 0 1 7 8 31

將(185.625) 10 表示成下列格式,超64二進制的浮點表示法。

Embed Size (px)

DESCRIPTION

將(185.625) 10 表示成下列格式,超64二進制的浮點表示法。. 0 1 7 8 31. IEEE Single-Precision( 單精倍)浮點表示法如下: Number=(-1) s × 2 ( C-127 ) × ( 1. F) 1. 從記憶體讀出的十六進制值 C2C00000, 其所代表的時進制值為何? 2.若41 B20000 乘以 C1200000 的結果存在記憶體的格式為何?以十六進制表示。. - PowerPoint PPT Presentation

Citation preview

1

• 將 (185.625)10表示成下列格式,超 64 二進制的浮點表示法。

S 指數 分數0 1 7 8 31

2

• IEEE Single-Precision( 單精倍 ) 浮點表示法如下:

Number=(-1)s×2(C-127) ×(1.F)

1. 從記憶體讀出的十六進制值 C2C00000 ,其所代表的時進制值為何?

2. 若 41B20000 乘以 C1200000 的結果存在記憶體的格式為何?以十六進制表示。

S 指數 (C) 分數 (F)0 1 8 9 31

3

• 有一電腦其浮點表示法如下:1. 最大的表示範圍為何?2. 最小正數為何?3. 十進制的有效位數?

S 指數 分數0 1 5 6 15

4

正負數表示法

• 三種最常見的正負數表示法分別如下– 『帶符號大小』– 『 1's 補數』– 『 2's 補數』

• 這三種表示法都必須事先固定位元長度• 現代電腦使用的是『 2's 補數』表示法。• 三種表示法的對照表如下(其中 2's 補數的負數表示法為 1's 補數負數 +1 ):

5

十進位 帶符號大小 1's 補數 2's 補數+7 0111 0111 0111+6 0110 0110 0110+5 0101 0101 0101+4 0100 0100 0100+3 0011 0011 0011+2 0010 0010 0010+1 0001 0001 0001

0+0 0000 0000

0000-0 1000 1111

-1 1001 1110 1111-2 1010 1101 1110-3 1011 1100 1101-4 1100 1011 1100-5 1101 1010 1011-6 1110 1001 1010-7 1111 1000 1001-8 無法表示 無法表示 1000

以 4 位元表示正負整值的三種表示法對照表

6

帶符號大小( signed-magnitude)

• 帶符號大小的正負數表示法,顧名思義,就是有一個位元用來表示該數值為正數還是負數。這個位元通常位於最左邊。– 使用 n 個位元來表達正負整數時,數值的表達範圍就只剩 n-1 個位元可以使用– 所以正整數的表達範圍是 +0~+(2n-1-1)– 負整數的表達範圍是 -(2n-1-1)~-0– 明顯地,對於 0 而言,使用帶符號大小表示 0 的時候, +0與 -0 是不一樣的。

• 以 8 位元來表示正負整數時,若採用帶符號大小來表示,方法則如下所列:

8 位元的帶符號表示法

7

1's 補數( 1's complement )• 1's補數( 1's complement)和帶符號表示法的原理不太相同,在 1's 補數中,

如果要表達負數,則必須先求得正整數,然後再將每個位元加以反相( inverse),就可以得到負整數了,所謂反相,其實就是將該位元由 1變 0或由 0變 1 ,如下圖範例:

– 在上圖中,我們可以很明顯看到, 1's 補數的轉換機制是可逆的,換句話說,當您看到一個負的 1's 補數二進位數字時,如果想要知道該數值代表多少,同樣可以透過反相求出該負整數的絕對值。

1's 補數的正負轉換

8

2's 補數( 2's complement )• 2's補數( 2's complement)是一個最完美的正負二進位整數的表示法,

它是基於 1's 補數演變而來(同樣必須限制表示的位元寬度),也就是當我們要將一個二進位整數變號時,只需要先將其 1's 補數求出,然後再加 1 ,就可以得到 2's 補數了,如下圖所示:

2's 補數的正負轉換

9

2's 補數( 2's complement )– 在上圖中,我們可以很明顯看到,其實 2's 補數的轉換機制對於『正整數轉

負整數』或『負整數轉正整數』所使用的方法都是一樣的,例如,當您看到2's 補數二進位負整數 110010112時,也可以先將其反相(使用 1's 補數的方法),然後再加 1 ,就可以得到該負整數的絕對值了。

– 2's補數是現今大多數電腦內部的邏輯電路所採用的整數表示法,因為它具有下列特點: • +0與 -0 的表示法相同。以 8 個位元來加以表示 +0與 -0 ,都是

000000002 。• 可以透過最左邊的位元快速判定該數為正整數或負整數。(最左邊位元為 0 ,一定是正整數或 0 )。

• 負整數的表達範圍更大,它可以表達的整數範圍是 +(2n-1-1) ~ -2n-1 (位元寬度為 n 時)。而 -2n-1的表示法就是 1000…0002 。

• 可以輕易地使用邏輯電路實作加/減法器,並且正負數轉換機制相同,因此不必額外設計一套電路。

10

2's 補數( 2's complement )帶符號大小 1's 補數 2's 補數

採用 非個人電腦採用 非個人電腦採用 個人電腦採用

優點

1. 最左邊位元可判定正負數。2. 對人來說非常簡單,容易理解。

1. 最左邊位元可判定正負數。2. 轉換機制是可逆的。3. 可以透過邏輯電路輕鬆設計完成反相。

1. 最左邊位元可判定正負數。2.+0與 -0 表示法相同。3. 表達範圍是 +(2n-1-1) ~ -2n-1 。4. 轉換機制是可逆的。5. 可以輕易地使用邏輯電路實作相關應用電路。

缺點

1.+0與 -0 的表示不同。2. 不容易使用邏輯電路實作相關應用電路。3. 表達範圍是+0~+(2n-1-1) 、-(2n-1-1)~-0 。4.+0與 -0 表示方式不同。

1. 必須限制表示的位元數。2. 表達範圍是+0~+(2n-1-1) 、-(2n-1-1)~-0 。3.+0與 -0 表示方式不同。

1. 必須限制表示的位元數

11

文字資料表示法

• 前面章節介紹了數值資料在電腦的存放方式,而文字資料又是如何被放到記憶體的呢?由於每一個記憶體單元只能接受0、 1等 2 進制的表示法,因此文字資料必須先經由編碼,使得不同的字元對應到唯一的位元圖樣( bit pattern ),然後才能存入記憶體中。目前最普遍的編碼為 ASCII ,繁體中文則為 Big5 碼。此外,為了統一各國文字的編碼方式,另外也發展了 Unicode 編碼方式。

• 2.7.1 ASCII 碼– ASCII碼 (American Standard Code for Information Interchange,唸做 as-

key)為美國國家標準局所制定的一種編碼方式,目的是提供一個各類電腦皆通用的編碼方式以便於使得這些電腦可以互通訊息。

– ASCII碼為 7個 bits,因此可以產生 128種變化,每一個變化都可以用來表示一個特殊字符,其中的 95個字符為可列印字符,而剩餘的字符則為不可列印的特殊控制字符,例如:換列、倒退鍵、歸位等。詳細的 ASCII表如下:

12

十進位 十六進位 ASCII 字元

0 00 NULL

1 01 SOH

2 02 STX

3 03 ETX

4 04 EOT

5 05 ENQ

6 06 ACK

7 07 BEL

8 08 BS

9 09 HT

10 0A LF

11 0B VT

12 0C FF

13 0D CR

14 0E SO

15 0F SI

: : :

十進位 十六進位 ASCII 字元

48 30 0

49 31 1

50 32 2

51 33 3

52 34 4

53 35 5

54 36 6

55 37 7

56 38 8

57 39 9

58 3A :

59 3B ;

60 3C <

61 3D =

62 3E >

63 3F ?

: : :

十進位 十六進位 ASCII 字元

65 41 A

66 42 B

67 43 C

68 44 D

69 45 E

70 46 F

71 47 G

72 48 H

73 49 I

74 4A J

75 4B K

76 4C L

77 4D M

78 4E N

79 4F O

80 50 P

: : :

十進位 十六進位 ASCII 字元

97 61 a

98 62 b

99 63 c

100 64 d

101 65 e

102 66 f

103 67 g

104 68 h

105 69 i

106 6A j

107 6B k

108 6C l

109 6D m

110 6E n

111 6F o

112 70 p

: : :

13

ASCII 碼– 由於 1個 Bytes為 8個 Bits ,因此留下剩餘的 1個 Bit 並無任何作用,有時將

該位元用來記錄同位檢查,或者將 ASCII擴充為 8個 Bits ,稱之為 ASCII-8 ,可以產生 256 種變化。

• ASCII 的應用實例非常多,例如您在個人電腦的鍵盤按下一個『 H 』鍵,它將會被轉換為 4816,就是 ASCII 碼的 01001000 ,然後再存入記憶體中。– 雖然 ASCII 是目前最普遍的編碼系統,但並非所有的系統都採用這種編碼方式,

例如 IBM 機器(非 IBM PC )則採用 8 位元碼 EBCDIC( Extended Binary Coded Decimal Interchange Code )或 ASCII-9 ,以便表達較多的字元變化。

• 【同位位元檢查】– 同位位元檢查( parity bit check )是一種偵測錯誤的技術,在送出資料之前,

先加上一個同位位元(一般會加在前面),然後才將資料傳送出去,接收端於收到資料後,會檢查每個位元一共包含奇數個 1 或偶數個 1 ,以便判斷傳輸過程中,是否發生錯誤。

– 因此,同位位元檢查又可以分為奇同位檢查( odd parity check )與偶同位檢查( even parity check )。顧名思義,奇同位檢查的資料位元與同位位元合計一共應該有奇數個 1;偶同位檢查的資料位元與同位位元合計一共應該有偶數個 1 ,若接收端發現資料不符合此項規則,則代表資料在傳輸過程中發生了錯誤。(但並非符合規則就是沒有錯誤)

14

ASCII 碼• 假設,我們採用奇同位檢查,傳送大寫英文字母 Q與 U ,其 ASCII 碼分別為 1010001( Q )與 1010101( U ),在傳送資料之前,必須先將同位位元加在前面,也就是 01010001( Q )與 11010101( U ),使得位元圖樣共有奇數個 1 ,如下圖所示。

• 對於接收端而言,當它收到 01010001與 11010101 資料時,會先檢查是否每一筆位元圖樣都恰好有奇數個 1 ,如果確實如此,則視為正確,便將同位位元去除,取出原始資料 1010001( Q )與 1010101( U );如果發現位元圖樣出現偶數個 1 ,則視為資料錯誤,此時可以要求重新再送一次資料,或產生錯誤訊息。

奇同位檢查

15

ASCII 碼

– 使用同位檢查技術,對於所有的奇數個位元的錯誤而言,一定可以被檢測出來;但偶數個(兩個、四個‥‥)位元同時發生錯誤時,將無法發現錯誤。

– 由於同位位元只會使得原本的資料長度多一個位元(甚至不會浪費位元數,例如可以善用 ASCII 多餘的一個位元來當作同位位元),所以並不會太佔用空間。況且,由於硬體實作或軟體實作只需要使用 XOR與 NOT兩種邏輯運算即可實現同位檢查,因此雖然無法找出所有的錯誤,但同位檢查技術仍舊被許多應用所採用。

奇同位檢查運作流程

16

中文內碼

• 中文字與英文字差異極大,英文單字是由許多字母所組成,由於大小寫字母與標點符號加起來並不會超過 128 種變化,因此可以使用 ASCII 碼來表示,也就是使用 1 個位元組就可解決每一個字母的表示法。而中文字多達數萬字,因此必須使用 2 個位元組來加以儲存一個中文字型的內碼,通常我們將這種編碼方式稱為『雙位元組編碼』,就中文而言則稱為「中文內碼系統」。– 初期國內發展中文系統時,發展了許多種的中文內碼,例如: BIG5 (也可以寫作 Big-5;稱為大五碼)、王安碼、 CCCII 碼( Chinese Character Code for Information Interchange )。

• 目前大多以資策會在 1984年所制定的 Big-5 碼做為中文系統, Big-5 碼共提供了五千多個常用字,七千多個次常用字,另外尚有 499 個特殊符號,因此一共約制訂一萬三千多個中文字內碼。一部份的 Big-5 碼如下表所列:– (完整的 Big-5 碼請至 http://input.cpatch.org/code/big5.zip 下載)

17

中文內碼內碼 字符 內碼 字符 內碼 字符 內碼 字符 內碼 字符A140 0 A141 , A142 、 A143 。 A144 .

A145 ‧ A146 ; A147 : A148 ? A149 !

A14A ︰ A14B … A14C ‥ A14D ﹐ A14E ﹑

A14F ﹒ A150 · A151 ﹔ A152 ﹕ A153 ﹖

A154 ﹗ A155 | A156 - A157 ︱ A158 -

A159 ︳ A15A ╴ A15B ︴ A15C ﹏ A15D (

A15E ) A15F ︵ A160 ︶ A161 { A162 }

A163 ︷ A164 ︸ A165 〔 A166 〕 A167 ︹

A168 ︺ A169 【 A16A 】 A16B ︻ A16C ︼

A16D 《 A16E 》 A16F ︽ A170 ︾ A171 〈

A172 〉 A173 ︿ A174 ﹀ A175 「 A176 」

A177 ﹁ A178 ﹂ A179 『 A17A 』 A17B ﹃

A17C ﹄ A17D ﹙ A17E ﹚ A1A1 ﹛ A1A2 ﹜

部分 BIG5 字元表 -1

18

中文內碼內碼 字符 內碼 字符 內碼 字符 內碼 字符 內碼 字符B140 莆 B141 莧 B142 處 B143 彪 B144 蛇B145 蛀 B146 蚶 B147 蛄 B148 蚵 B149 蛆B14A 蛋 B14B 蚱 B14C 蚯 B14D 蛉 B14E 術B14F 袞 B150 袈 B151 被 B152 袒 B153 袖B154 袍 B155 袋 B156 覓 B157 規 B158 訪B159 訝 B15A 訣 B15B 訥 B15C 許 B15D 設B15E 訟 B15F 訛 B160 訢 B161 豉 B162 豚B163 販 B164 責 B165 貫 B166 貨 B167 貪B168 貧 B169 赧 B16A 赦 B16B 趾 B16C 趺B16D 軛 B16E 軟 B16F 這 B170 逍 B171 通B172 逗 B173 連 B174 速 B175 逝 B176 逐B177 逕 B178 逞 B179 造 B17A 透 B17B 逢B17C 逖 B17D 逛 B17E 途 B1A1 部 B1A2 郭

部分 BIG5 字元表 -2

19

中文內碼

• 【深入探討 Big5】– Big5 碼使用兩個位元組來存放資料,而 ASCII 使用一個位元組來存放資料,假設我們的文章中出現中英混雜的狀況時(例如:『m乘 n 』),電腦是如何判斷哪些是中文字,哪些又是英文字母呢?

• 為了解決這個問題, Big5 的第一個位元組規定一定要比 127 還要大,如此使用 Big5內碼的電腦發現第一個位元組超過 127 時,就可以判定為中文。

• 例如:『m乘 n 』實際上的資料應該是『 6DADBC6E 』,電腦預定每次讀取一個位元組,當讀到『 6D 』時,發現比 7F 還要小,所以直接輸出『m 』;當讀到『 AD 』時,發現比 7F 還要大,所以必須再讀取一個位元組『 BC 』,組成 Big5碼『 ADBC 』後,透過查表對應到『乘』,然後才輸出『乘』;最後又讀取一個位元組,讀到『 6E 』,發現比 7F 還要小,所以直接輸出『 n 』,而成為我們看到的『m乘 n 』。

– 事實上, 128 (即 A016)也不會出現在 Big5 碼的第一個位元組, Big5 碼的第一個位元組只可能出現( A116 - F916)的數值,同時也不是每一個數值都對應了中文字元(只有其中的 3+35+49=87 個數值有用),關於 Big5 的第一個位元組規定如下:

20

中文內碼

– 至於 Big5 的第二個位元組則介於 4016 - FE16,並且也不是全部都有用到(只有其中的 63+94=157 個數值有用),關於 Big5 的第二個位元組規定如下:

分類區 範圍 統計符號區 A1 - A3 3 sectors

常用字區 A4 - C6 35 sectors

未定義區 C7 - C8 2 sectors

次常用字區 C9 - F9 49 sectors

分類區 範圍 統計第一部份 40 - 7E 63 codes

未定義區 7F - A0 34 codes

第二部分 A1 - FE 94 codes

Big5 的第二個位元組

Big5 的第一個位元組

21

中文內碼

– 所以 Big5共定義了 87*157=13659 個中文字。光是這些中文字夠用嗎?• 答案當然是不夠的,話說 BIG5之所以叫 BIG5 ,是因為該碼是在

1984年由台灣五家電腦公司共同推動,事實上,在這之前,國字整理小組已經整理出七萬多個中文字,而 BIG5 只能容納一萬三千多個中文字,所以根本不夠用,而且連五家電腦公司之一的宏碁的「碁」都打不出來,更不用說,打不出游錫「堃」等字。

– 由於 Big5 不夠使用,因此後來又出現了一些改良版,如 BIG5_Eten、BIG5-HKSCS、 BIG-5E及 BIG5_unicode等等,而原本的 Big5 碼則稱為 BIG5_1984 。

• 由於版本如此之多,因此也使得軟體支援 Big5 碼出現不統一的現象。而面對這個問題,大家似乎不想直接在 Big5 方面著手解決,而期望未來採用 Unicode 碼加以解決。

22

Unicode

• 除了中文問題之外,事實上許多非英語系國家也面臨文字數量過多的問題,因此,為了統一解決這些問題,又發展了另一套編碼系統,稱之為 Unicode 。– Unicode 是依據 ISO/IEC 10646標準所制定的一套通行全球的編碼系

統, Unicode 使用 2 個位元組來表示字元符號,因此可以產生 65536個字元,其中最前面的 128 個字元與 ASCII 相同。使用 Unicode 將可以讓電腦處理目前人類所遭遇的所有語系文字,例如:英文、中文、日文、法文、拉丁文‥‥等等,而不需要為各種不同語系設計不同的編碼系統,因此在網際網路中,尤其容易見到。

23

Unicode

• Unicode 的優點– 由於網際網路的發達,因此,跨國性的文件常常會被採用,例如:我

們很可能會到大陸網站找尋資料。由於台灣使用的字集是繁體中文字集 Big5 ,而大陸則使用簡體中文字集 GB2312 ,因此,若使用繁體的瀏覽器閱讀簡體網頁時,會發生衝碼現象,也就是可能會出現一些亂碼和部分的繁體中文,這是由於簡體中文內碼恰好對應到某個繁體中文的內碼。

– 而瀏覽網頁發生衝碼現象,主要則是由於該網頁採用各國自行使用的內碼所致,若使用 Unicode 進行編碼的話,就不會發生這種現象,因為 Unicode已經將各國編碼系統打亂,重新制定為單一的編碼系統。並且大多數的瀏覽器都已經支援了 Unicode 字集,以便顯示包含各國文字的網頁。

24

Unicode

• UTF-16與 UTF-8– Unicode使用 16位元進行各國文字的編碼,這種格式稱之為 UTF-

16。但是對於某些全部都是英文的文件而言,使用 UTF-16的 16個位元存放英文字母,顯得有些浪費,因此 Unicode提供了另一種UTF-8的儲存格式。

– UFT-8的編碼長度並不是固定的 8個位元,而是一種可變動式的編碼長度,例如,英文會以 8個位元來儲存,但中文就會以 24個位元來儲存,因此,如果是中文字出現頻率較高的文件,使用 UTF-16格式儲存會比 UTF-8來得節省空間。

25

• 資料壓縮–減小儲存一筆資料所需的空間大小• 壓縮率–壓縮後資料大小除以原始資料大小• 資料壓縮技術可以是資料取得時沒有漏失任何原始資訊的無漏失型,或是資料於壓縮過程會漏失某些資訊的漏失型。

26

文字壓縮

• 尋找有效率儲存文字以及在一部電腦與另一部之間有效率傳輸文字的方式是很重要的一件事。 – 關鍵字編碼 – 遊程長度編碼 – 霍夫曼編碼

27

關鍵字編碼

• 將使用頻繁的單字以一個單一字元取代。 例如:

28

關鍵字編碼 (續 )

• 讓我們將下列段落加以編碼:– The human body is composed of many independent systems, such

as the circulatory system, the respiratory system, and the reproductive system. Not only must all systems work independently, they must interact and cooperate as well. Overall health is a function of the well-being of separate systems, as well as how these separate systems work in concert.

29

關鍵字編碼 (續 )

• 編碼後的段落如下:– The human body is composed of many independent systems, such ^

~ circulatory system, ~ respiratory system, + ~ reproductive system. Not only & each system work independently, they & interact + cooperate ^ %. Overall health is a function of ~ %- being of separate systems, ^ % ^ how # separate systems work in concert.

30

關鍵字編碼 (續 )

• 原始段落中包括空白與標點符號共有 349 個字元,編碼後的段落則有 314 個字元,結果共節省 35 個字元。這個範例的壓縮率是 314/349 或大約 0.9 。

• 用來編碼的字元不能為原始文字的一部份。

31

遊程長度編碼

• 某個單一字元可能於長序列中一再重覆。這種重覆類型並不只是局限於英文文字,也經常發生在大資料流中。

• 遊程長度編碼中,一個序列的重覆字元是由一個旗標字元( flag character ),緊接著這個重覆字元,再緊接著一個指示重覆多少次的單一數元來取代。

32

遊程長度編碼 (續 )

• AAAAAAA 應該被編碼成: *A7

• *n5*x9ccc*h6 some other text *k8eee 應該解碼成下列的原始文字:nnnnnxxxxxxxxxccchhhhhh some other text kkkkkkkkeee

• 原始字串含有 51 個字元,編碼後的字串則含有 35 個字元,因此這個範例的壓縮率是 35/51 或者是大約 0.68 。

• 因為我們使用一個字元來計算重覆次數,我們似乎無法將重覆長度超過九個的字串編碼。計數字元以 ASCII 數元來詮釋可以被取代成以二進制數字來詮釋。

33

霍夫曼編碼

• 為什麼很少使用於文字的字元“ X” 應該與使用很頻繁的空白佔用相同的位元數目?霍夫曼使用可變長度位元的字串來表示每一個字元。

• 一些字元可能以五個位元表示,另外一些字元則以六個位元表示,但還沒有以七個位元來表示,之後的位元數目也是如此。

34

夫曼編碼 (續 )

• 假使我們只使用一些字元來表示經常出現的字元且為不常出現的字元保留更長位元的字串,則整個文件大小就變小了。

35

夫曼編碼 (續 )

• 例如

36

夫曼編碼 (續 )

• DOORBELL 以二進制編碼應該為: 1011110110111101001100100.

• 如果我們使用固定位元數目( 8 位元)的字串來表示每一個字元,則原始字串的二進制形式將是 8 個字元乘以 8 位元或64 位元。這個字串的霍夫曼編碼是 25 個位元長,得到壓縮比為 25/64 或大約 0.39 。

• 霍夫曼編碼的一個重要特徵是,沒有用來表示一個字元的位元字串是其他任何也是用來表示一個字元的位元字串的字首。