1
第 3 章資料和程式表示法
2
數位邏輯
• 硬體工程師使用邏輯閘設計電腦• 數位輸入或輸出有兩種可能的狀態:
– 5V 和 0V
– high 和 low
– true 和 false
3
資料表示法
• 依照階層概念,資料表示法架構 於數位邏輯之上。
• 集合多個布林位元成為– 數字– 字元– 位址
4
位元( Bit )
• 數位邏輯數值的直接表示方式• 描述數位的兩個可能值: 0 和 1
• 多個位元可以代表更複雜的資料
5
位元組( Byte )
• k 位元所組成的位元組• K 值並沒有任何的強制規定• 位元組範例:
– CDC 使用 6 位元的位元組– BBN 使用 10 位元的位元組– IBM 使用 10 位元的位元組
• 現代電腦使用 8 位元的位元組
6
位元組大小和數值
• 許多電腦使用位元組位址當作最小的記憶體單位。
• 6 位元可以代表 64 個數值• 8 位元可以代表 256 個數值
7
二進位表示法
8
位元意義
• 位元本身並沒有任何意義• 相關的位元意義通常是由其
硬體和軟體來加以詮釋
9
直譯範例
• 比如:可以使用三個位元,來代表三個電腦周邊設備的狀態,如下:– 如果第一位元為 1 ,表示磁碟已經連線。– 如果第二位元為 1 ,表示印表機已經連線。– 如果第三位元為 1 ,表示鍵盤已經連線。
10
數值
• 最常使用的階層概念,就是把位元組合後,當作數值。
• 比如:二進位整數 • 使用前後順序的位置關係,來代表基底的冪次高低 。
11
位置冪次的轉譯
• 考慮下列的二進位範例:010101
• 根據位置冪次觀念,數值應解譯成:0×25+1×24+0×23+1×22+0×21+1×20=21
12
數值範圍
• 一組 k 位元的組合可以用來代表整數,使用傳統的位置冪次觀念, k 位元數值可以代表 0 到 2k-1。
13
十六進位觀念
• 為了幫助人們表示二進位數值 ,可以使用 16 進位數值 。
• 每四個二進制位元編成單一的 16進位之位數(代表 0 ~ 15 ) 。
14
十六進位之位數
15
十六進位常數
• 某些程式語言喜歡使用十六進位• 典型語法:常數開頭加上 0x( 零 x)
• 比如:0xDEC90949
16
字元集
• 每一種電腦系統都必須定義自己的字元集。
• 字元集包含英文大寫、英文小寫、數字、標點符號、和特殊符號等。
• 每一個字元必須使用一個唯一的位元組,來加以代表。
17
字元編碼範例
• EBCDIC
• ASCII
• Unicode
18
EBCDIC
• 全名 Extended Binary Coded Decimal Interchange Code
• 1960 年代最普遍的編碼方法• IBM 公司定義的字元集• 目前仍然使用於 IBM 大型主機上• 6 位元的字元集
19
ASCII
• 全名 American Standard Code for Information Interchange – ANSI 協會定義的字元集– 非電腦廠商定義的字元集
• ASCII 碼制訂 128 個字元 – 比如,英文字母 a 表示法為 01100001(二進制)
20
ASCII 字元集
21
Unicode
• Unicode 設計成 16 位元字元集 • 這個字元集不但延伸 ASCII 字元集,也可以容納更多的字元。
• 適用於所有的語言 ,比如:中文。
22
數端
• 位元數端• 位元組數端
23
位元數端
數端的討論對於彼此之間的資料轉移相當重要,舉例而言,想要在網路上傳送一個位元組時,雙方都必須同意這個位元組是先從最大位元傳送,還是先傳送最小位元!這種位元的排列順序稱為位元數端。
24
位元組數端
同樣把數端主題延伸到多個位元組時,也有一樣的問題,比如:傳送 32 位元的整數,如果電腦的位元組是 8 位元,則整數會被分成 4 位元組,現在到底要先傳送最大的位元組、或先傳最小的位元組!這種位元組的排列順序稱為位元組數端。
25
大端 與 小端
26
二進位整數表示法
• 使用位置冪次表示法的二進位數值 • K 位元的組合可以代表 2k個數值• 電腦習慣使用的 k = 8,16,32 和 64
• 位置冪次表示法產生無號整數
27
無號整數
• 最直接的位置冪次表示法• 無號整數
– 每個位數都是 2 的冪次乘積。 – 全部是正整數,無法表示負數。 –算術運算後可能產生溢位和欠位。– 可能有循環觀念。
28
溢位
• 溢位狀態指示:結果是否超過 k 位元範圍!• 溢出的第 k+1 位元就是一般所謂的進位
29
有號整數
• 大部分的程式需要有號整數• 有多種表示法• 大約有一半的數值,用來表示負數。
30
有號整數表示法
• 符號位元 • 1’s補數• 2’s補數• 注意:以上每種表示法都有各自的優缺點
31
符號位元表示法
• 可能會出現兩個零值:–正零–負零
• 正零和負零都是零• 儘管不會影響任何的數學觀念,但零值是電腦最常使用的數值,兩個零值恐怕會增加複雜度。
32
1’s 補數表示法
• 比如: 4 位元的 1’s補數表示法– 0010 代表 2– 1101 代表 -2
• 1’s補數也有兩個零值:– 所有位元為 0– 所有位元為 1
• 依然存在兩個零值的問題。
33
2’s 補數表示法
• 比如: 4 位元的 2’s補數表示法– 0010 代表 2– 1110 代表 -2
• 正數和負數的數量並不對稱–負數比正數多一個數值
34
無號 / 有號整數之代表意義不同
35
無號 / 有號整數的硬體需求
• 不管無號整數或 2’s補數表示法,電腦都使用相同的硬體。
• 執行軟體進行整數算術,只要選擇適合的整數表示法,即可。
• 比如: 1001+ 1= 1010– 如果當作 無號整數,則解釋為”把 9加 1得到 10” 。
– 如果當作 2’s補數法,則解釋為”把 -7加 1得到 6” 。
36
符號延伸
• 大部分電腦會提供多重位元的能力– 比如: 16 位元、 32 位元、和 64 位元等數值處理能力。
–允許程式設計師自由選擇其中一種。• 問題在於:如何把較少位元數的整數,改成較多位元數的整數呢?
37
符號延伸的意義
• 就是延伸最高的符號位元• 比如:如何把某個 16 位元數值改成 32位元數值呢?– 對齊最小位元,填入低階的 16 位元資料。– 延伸其符號位元,填入高階的 16 位元。
• 若是正數 ( 符號位元 0) ,高階 16 位元都填入0 。
• 若是負數 ( 符號位元 1) ,高階 16 位元都填入1 。
38
符號延伸後的數值大小
在 2’s補數法中,一個 k 位元的整數 Q要延伸超過 k 位元的數值,必須先對齊低階 k 位元,超過的較高階位元全數填入 Q 的最高位元(符號位元),這種符號延伸動作並不會影響到原數值的大小。
39
符號延伸範例
• 8 位元有號整數11111101 ( -3 )
• 符號延伸成 16 位元有號整數11111111 11111101 ( -3 )
• 數值大小仍然不變
40
科學記號
• 化學知名的亞佛加厥數之科學記號為 6.022×1023 。– 其中 6.022 為有效數– 而 23則為指數
41
浮點數
• 電腦的浮點數源於一般的科學記號• 但仍有差異• 電腦浮點數的基底採用二進位,有些位元表示有效數,有些表示指數。
42
最佳化浮點數格式
• 數值必須正規化• 由於最前頭的位元總是為 1 ,因此可以省略不寫。
• 指數必須能夠表示負值
43
IEEE 754 標準浮點數表示法• 分成兩種:單精準度和雙精準度。• 單精準度有 32 位元• 雙精準度有 64 位元
44
特殊浮點數
• 零值– 所有位元為 0
• +∞ (正無限大)–指數全為 1 ,有效數全為 0 , S欄位 =0 。
• -∞ (負無限大)–指數全為 1 ,有效數全為 0 , S欄位 =1 。
45
IEEE 754 浮點數範圍
• 單精準度範圍約為 2-126~2127
• 改以十進位基底來看– 單精準度範圍約為 10-38~1038 – 雙精準度範圍約為 10-308~10308
46
聚合資料
• 連續的位元組位址• 比如:儲存 3 個 16 位元的聚合資料,會佔據連續 6 個位元組的位址。
47
結論 • 底層的數位硬體有兩個可能的輸出值,稱為位元。
• 集合某些位元用來代表– 整數– 字元 –浮點數
• 整數可以使用下列表示法– 符號位元– 1’s補數– 2’s補數
48
結論( cont. )
• 無號整數和 2’s補數的算術,使用相同的電腦硬體。
• 數端分成– 大端順序– 小端順序
• ANSI 和 IEEE 組織定義標準的資料表示法