正文 第二章 計算機中的數據信息(二)(1 / 3)

2.3定點表示與浮點表示

前麵已經指出,所需處理的數可能既有整數部分又有小數部分,眾所周知,在做加減運算時需要先將小數點位置對準,才能按位對準地進行加減,這就提出了一個小數點位置_表示的問題。根據小數點位置是否固定;1數的格式分為定點表示與浮點表示兩種。

一、定點表示法

定點表示法約定,計算機中的數其小數點位置固定不變,為了便於處理,一般隻采取三種簡單的約定,相應有三種類型的定點數。

1.無符號整數

無符號整數即正整數,符號位略去,所有的數位都用來表示數值的大小,小數點在最低位之後。二進製無符號整數:……a的表示範圍由0(2n+I-l),分辨率為1,後者表明其絕對精度。由於是正數,原碼形式與補碼形式沒有區別。在教學中為了暫時簡化數的類型以利理解,有時約定為無符號整數。

2.帶符號定點整數

約定小數點在最低位之後,即純整數,其格式如圖2-1所示。

定點數格式本身隻是約定了小數點位置,即是整數還是小數,它同樣存在原碼與補碼之

3.帶符號定點小數

約定小數點在符號位之後、最高數位之前,即純小數,常書寫為x。……,其格式。

由於計算機的字長有一定限製,因此在上麵的討論中我們關注兩項指標:表示範圍與分辨率(精度)。數值超出表示範圍稱為溢出,正數溢出稱為正溢,負數溢出稱為負溢。如果絕對值小於分辨率,機器無法分辨,處理時當成機器零。

在硬件上隻考慮定點運算的計算機稱為定點機,實際上從硬件的角度小數點與數位信息不同,它並不存在,僅僅是隱含約定其位置,也就是約定數是整數還是小數,小數點本身並不需要用某個硬件設備專門表示。所以前麵講的三種定點數並無硬件上的區分,在編製程序時自行約定究竟選用哪種定點格式,以後就當成這種格式處理它,也就是說程序編製者應當事先明確,自己程序中所處理的對象是哪一種定點數。

不難想到,實際處理的數很可能既有整數部分又有小數部分,不一定是純整數或純小數。為了將它變成約定的定點數格式,就需要在編製程序時設定一個比例因子,將需處理的數縮小為定點小數,或者擴大為定點整數,所得到的運算結果,再根據保存的比例因子與實際的運算操作還原為實際的數值。如果比例因子選擇不當,例如在變為定點小數時縮小比例不足,運算結果可能出現等於或大於1的情況,即產生溢出;如果縮小比例過大則會損失有效精度.在轉換為定點整數時也需注意這些問題。

二、浮點表示法

定點表示方法比較簡單,實現定點運算的硬件成本較低,廣泛用於低檔機中。但是在有限位的定點數中,表示範圍與精度兩項指標是有矛盾的。例如一個16位的無符號正整數,如果要求表示範圍為0-(64x1024-1),則分辨率為JU如果要求範圍擴大10倍,則分辨率將為10,即精度降低10倍。如何在有限位數的前提下,既能擴大數的表示範圍,又能在實K應用場合保持有效精度呢?這就要求我們采取一種靈活的作法,將比例因子以恰當的形式包含在數之中,使之能根據每一個數的需要浮動,盡可能地協調該數在表示範圍與精度兩方麵的要求。實質上是讓小數點位置不固定,根據需要浮動,所以稱為浮點表示法。

1.浮點格式

浮點數的代碼由二部分組成:階碼、尾數。

是階碼,為整數,可用補碼表示或用一種移碼表示(關於移碼的概念,可參考計算機組成原理教材)。由於五是S的指數,即階次,所以反映5大小的這段代碼叫做階碼,它實際上就是一種比例因子。五為正數表示將尾數擴大為1倍,醜為負數則表示將尾數縮小若幹倍。

M是尾數,為定點小數,可用補碼或原碼表示。為了充分利用尾數部分的有效位數使精度盡量高些,一般采取規格化表尾數的方法。如果階碼以2為底,即基數為2,則規格化浮點數的尾數滿足下述條件。顯然,對於正數,規格化尾數的特征是最高數位=1,這意味著尾數的有效位數被充分利用了。對於用負數補碼表示的規格化尾數,除-1/2外,其餘情況財1=0。

浮點格式表明,浮點數實際上由兩個定點數組成,階碼是一個定點整數,尾數是一個定點小數。相當於比例因子,可以根據每個數的大小需要來調整階碼,也就是調整比例因子,以保持有效尾數的精度。

2.浮點格式的表示範圍與精度

我們先列出浮點數的幾種典型值,以加深對浮點數格式的認識。假定浮點格式如下:階碼部分連階符在內共m+1位,補碼表示;尾數部分連數符在內共n+1位,規格化,補碼表示;階碼以2為底。

浮點數代碼中本來並無逗號與小數點,為了幫助初學者熟悉格式分段含意,我們在階碼與尾數之間加注一個逗號,以將二部分分開,在數符與尾數有效數位之間加注一個小數點,這就便於大家分別求出階碼值、PE、尾數值。

當階碼為絕對值最大負數、尾數為最小正數時,浮點數為所能表示的最小非零正數注意,階碼采用補碼表示,其絕對值最大負數為-2,而規格化尾數的最小正數先2—1。當階碼與尾數均為最大正數時,浮點數為最大正數。當階碼為絕對值最大負數而尾數為絕對值最小負數時,浮點數為絕對值最小負數。當階碼為最大正數而尾數為絕對值最大負數時,浮點數為絕對值最大負數。注意,尾數用補碼表示時,其絕對值最大負數是-1。

浮點表示在表示範圍與相對精度上都明顯地優於定點表示,適於做科學計算。但是浮點運算相當於兩個相關的定點運算,即階碼運算與尾數運算,所以比定點運算複雜。如果靠硬件實現,設備代價要高些;如果靠軟件實現,則花費的時間要長些。因此一般根據需要將計算機分為幾種檔次:(1)硬件實現定點運算,靠軟件擴充浮點運算能力。(2)基本硬件隻支持定點運算,但可擴充浮點運算硬件。(3)基本硬件具備浮點運算能力。

至此,我們從數製、帶符號數表示、小數點問題等三個方麵,比較全麵地介紹了在計算機中如何表示數字,這是了解計算機工作原理的重要基礎知識。

2.4字符的表示

字符是另一種類型的信息形式。我們用字符與字符串構成程序設計語言,用來編寫程序,表達用戶對計算機發出的控製信息。有些字符就是某一控製命令的縮寫,例如表示回車。前麵曾經提到,字符是文字的基礎。所以字符的表示是信息表示的又一重要內容,它涉及到選擇哪些常用字符,采用什麼字符編碼。

一、ASCII碼

現在國際上廣泛采用的是美國標準信息交換代碼,簡稱ASCII碼,這就在大多數計算機中有一個通用的字符代碼標準。

對表中各字符的含意暫不作解釋,以後大家在具體應用時可結合有關資料去了解。現在僅對ASC11字符集的大致組成和編碼情況作些說明。

ASCII字符集包含128種字符,其中有阿拉伯數字0~9,大、小寫英文字母,一些在算式與語句中常用的符號如四則運算符、括號、標點符號等,一些標識符如空白,以及一些控製字符,這些字符的種類滿足了各種編程語言、西文文字、常見控製命令等的需要。每個字符用七位編碼表示,通常再加上一位校驗位組成一個字節。存儲器也常以字節作為一個存儲單元的基本長度,即八位,正好一個單元可存放一個ASCII字符編碼。

通用鍵盤的大部分鍵往往與最常用的字符相對應,當使用鍵盤輸入字符時,可用一種編碼電路將字符鍵的電信號直接編成相應的ASCII碼,也可以用其他方法先識別所按鍵的位置,形成位置碼,再將位置碼轉換為ASCII碼,輸入並保存在主存儲器中。在2.1中曾經提到,在計算機內部存放的數可采用幾種代碼形式,例如存放數字(23)I0,如果用二進製數形式,則存入代碼00010111;如果用二——h進製形式,則存入代碼00100011:如果用ASCII碼將23當成兩個字符,則占用兩個字節;00110010,.00110011(見表2-3)。ASCII碼本身隻有七位,最高位補0(未配校驗位)。