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