數據的類型:
按數制分::
十進制:在微機中直接運算困難;
二進制:佔存儲空間少,硬件上易於實現,易於運算;
十六進制:方便觀察和使用;
按數據格式分:
真值:沒有經過編碼的直觀數據表示方式,帶正負號的數據,任何數制均可
機器數:符號化後的數值表示;
- 符號也被編碼,不能隨便忽略任何位置上的0或1;
- 位數固定,一般爲字節整倍數,如8位、16位、32位;
- 可用原碼、反碼、補碼、移碼等形式編碼;
按數據的表示範圍分:
定點數:小數點位置固定,數據表示範圍小
浮點數:小數點位置不固定,數據表示範圍較大
按能否表示負數分:
無符號數:數據所有位均爲表示數值,只能表示正數;
有符號數:有正負之分,最高位爲符號位,其餘位表示數值。
1. 數據與文字的表示方式
1.1 數據格式
- 在選擇計算機的數的表示方式時,需要考慮以下因素:
①:要表示的數的類型(小數、整數、實數、複數)
②:可能遇到的數值範圍
③:數值的精確度
④:數據存儲和處理所需要的硬件代價
計算機中常用的數據表示格式有兩種一是定點格式
,二是浮點格式
。一般來說,定點格式容許的數值範圍有限,要求的處理硬件比較簡單,而浮點格式容許的數值範圍很大,要求處理的硬件比較複雜。
- 定點數的表示方法
一個定點數由符號位和數值域兩個部分組成。按小數點位置不同,定點數有純小數
和純整數
兩種表示方法。
純小數:
表示形式: x=x0x-1x-2…x-n
有符號數 x=xSx-1x-2…x-n, 0≤ |x|≤1-2-n ;xS爲符號位
無符號數 x=x0x-1x-2…x-n, 0≤x ≤1-2-n
數據表示範圍 0.0…0 = 0 ≤ |x| ≤ 1-2-n = 0.1…1
純整數:
表示形式 x=x0xnxn-1…x0
有符號數 x=xSx n-1 … x 1 x 0 |x|≤2n-1 ;xs爲符號位
無符號數 x=xnx n-1 … x 1 x 0 ,0≤x≤2n+1-1 ;xn爲數值位
- 浮點數的表示方法
浮點表示法:在計算機中把一個數的有效數字和數的範圍在計算機的一個存儲單元中分別予以表示,其中相當於數的小數點位置隨比例因子的不同而在一定範圍內可以自由浮動。
浮點數:小數點位置可變,形如科學計數法中的數據表示。
浮點數格式定義:N=Re×M
例:
任意一個十進制數N可以寫成:N=10E.M
任意一個二進制數N可以寫成:N=2e.M
M:尾數( mantissa),一個純小數,表示數據的全部有效數位,其位數決定着數值的精度;
R:基數( radix),可以取2、8、10、16,表示當前的數制;微機中,一般默認爲2,隱含表示。
e:階碼( exponent),是一個整數,用於指出小數點在該數中的位置,其位數決定着數據的取值範圍
機器數的一般表示形式:
- 按IEEE745標準,一個浮點數由符號位S,階碼E,尾數M三個域組成。其中階碼E的值等於指數的真值e加上一個固定偏移值。
32位浮點數:
64位浮點數:
- 十進制數串的表示方法
爲了使計算機能直接處理十進制形式的數據,採用兩種表示形式:
① 字符串形式,即一個字節存放在一個十進制的數位或符號位。除保存各數位,還需要指明該數存放的起始地址和總位數;主要用在非數值計算的應用領域;
② 壓縮的十進制數串形式,採用BCD碼錶示,即一個字節存放兩個十進制的數位。節省存儲空間,用於直接完成十進制數的算術運算。用特殊的二進制編碼表示數據正負,如1100—正、1101—負。
1.2 數的機械碼錶示
- 爲了區別一般書寫表示的數和機械中把符號位和數值位一起編碼來表示相應的數的各種表示方法表示的數(
原碼、反碼、補碼、移碼
),通常將前者稱爲真值,後者稱爲機器數或機器碼。 - 數的真值變成機器碼時有四種表示方法:
原碼錶示法,反碼錶示法,補碼錶示法,譯碼錶示法
。其中移碼主要用於表示浮點數的階碼E,已利於比較兩個指數的大小和對階操作。
1. 原碼錶示法
若定點整數的源碼形式位xnxn-1…x1x0(xn爲符號位),則原碼錶示的定義是:
2. 補碼錶示法
若定點整數的補碼形式位xnxn-1…x1x0(xn爲符號位),則補碼錶示的定義是:
正負整數的補碼於真值的關係:
3. 移碼錶示法
移碼通常用來表示浮點數的位階。由於階碼是k位的整數,假定定點整數移碼形式爲:ekek-1…e2e1e0時移碼的傳統定義是:
1.3 字符於字符串的表示方法
- 在數字計算機中只能處理二進制數據,一些特殊的信息應用到計算機時必須編寫成二進制格式的補碼,稱爲
符號數據
。
字符信息屬於符號數據,是處理非數值領域的問題。國際上採用的字符系統是七單位的ASCII碼。
● 字符串
指連續的一串字符,每個字節存一個字符。當存儲字長爲2、或4個字節時,在同一個存儲單元中;
可按從低位字節向高位字節的順序存放字符串的內容,或按從高位字節向低位字節的次序順序存放字符串的內容。
● ASCII碼(美國國家信息交換標準字符碼),包括128個字符,共需7位編碼;
ASCII碼規定:最高位爲0,餘下7位作爲128個字符的編碼,最高位的作用:奇偶校驗,擴展編碼
ASCII字符編碼表:
1.4 漢字的表示方法
-
使用西方標準鍵盤輸入文字,進行處理,並顯示打印漢字,是一項重大成就。爲此要解決漢字的
輸入編碼、漢字內碼、字模碼
等三種不同用途的編碼。 -
漢字的輸入編碼:
- 數字編碼:常用的是國際區位碼,用字符串代表一個漢字輸入。
優點:無重碼,輸入碼與內部編碼的轉換比較方便 / 缺點:代碼難以記憶 - 拼音碼:以漢字拼音爲基礎的輸入方法
優點:凡掌握漢語拼音的人不需要練習即可使用 / 缺點:輸入重複率過高 - 字形編碼:用漢字的形狀來編碼
- 數字編碼:常用的是國際區位碼,用字符串代表一個漢字輸入。
-
漢字內碼:
漢字內碼是用於漢字信息的存儲、交換、檢索等操作的機內代碼,一般採用兩個字節表示。 -
漢字字模碼:
字模碼是用點陣表示的漢字字形代碼,它是漢字的輸出形式。
1.5 校驗碼
- 數據校驗原因
元件故障,噪聲干擾等各種因素常常導致計算機在處理信息過程中出現錯誤。爲了防止錯誤,可以將信號採用專用的邏輯電路進行編碼已檢測錯誤,甚至矯正錯誤。 - 數據校驗碼的定義
能夠發現某些錯誤或具有自動糾錯能力的數據編碼,也稱檢錯碼;
最簡單且應用廣泛的檢錯碼是採用一位校驗位的奇校驗或偶校驗。
設X=(x0x1…xn-2xn-1)是一個n位字,則奇校驗位C-定義爲:
奇校驗位C定義爲:
數據校驗的基本原理是擴大碼距
;
碼距:任意兩個合法碼之間不同的二進制位的最少位數,僅有一位不同時,稱其碼距爲1。
爲運算器構造的簡單性,運算方法中算術運算通常採用補碼加、減法,原碼乘除法或補碼乘除法。爲了運算器的高速性和控制的簡單性,採用了先行進位、陣列乘除法、流水線等並行技術措施。
2.定點加法、減法運算
2.1 補碼加法
- 當負數用補碼錶示後,就可以和正數進行一樣的處理,這樣運算器只需要一個加法器就可以了,不必爲了負數在配一個減法器。
補碼加法的公式:
2.2 補碼減法
- 負數加法要利用補碼化爲加法來做,同樣補碼減法也要化爲加法來做
補碼減法公式:
2.3溢出概念和檢測方法
-
在定點整數機器中,數的表示範圍|x|<(2n-1)。在運算過程中如出現
大於字長絕對值現象
,稱爲"溢出"。 -
正溢:兩個正數相加,結果大於機器字長所能表達的最大正數。
-
負溢:兩個負數相加,結果大於機器字長所能表達的最小負數。
-
溢出判別方法
● 直接判別法:- 方法:
同號補碼相加,結果符號位與加數相反;
異號補碼相減,結果符號位與減數相同; - 特點:硬件實現較複雜;
舉例:
若[x]=0101,[y]補=0100,則 [x+y]補=1001上溢
若[x]=1011,[y]補=1100,則 [x+y]補=0111 下溢
若[x]=0101,[y]補=1100,則 [x-y]補=1001 上溢
● 變形補碼判別法
- 變形補碼,也叫模4補碼:採用雙符號位表示補碼
●判別方法:
- 特點:硬件實現簡單,只需對結果符號位進行異或
舉例:
若[x]補=00101,[y]補=00100,則[x+y]補=01001上溢
若[x]補=11011,[y]補=11100,則[x+y]補=10111下溢
若[x]補=00101,[y]補=11100,則[x-y]補=01001上溢
● 進位判別法
- 判別方法:
最高數值位的進位與符號位的進位是否相同;
判別公式:
溢出標誌v= Cf ⊕Cn-1
其中C爲符號位產生的進位,Cn-1爲最高數值位產生的進位。
- 方法:
3.定點乘法運算
- 串行乘法:
分析筆算乘法:
A=-0.1101 B=0.1011
A×B=-0.10001111 乘積的符號心算求得
符號位單獨處理,乘數的某一位決定是否加,被乘數4個位積一起相加,乘積的位數擴大了一倍。
改進:
A·B=A·0.1011
=0.1A+0.00A+0.001A+0.0001A
=0.1A+0.00A+0.001(A+0.1A)
=0.1A+0.01[0·A+0.1(A+0.1A)]
=0.1{A+0.1[0·A+0.1[A+0.1A)]}
右移一位 =2-1{A+2-1[0·A+2-1[A+2-1(A+0))]}
第一步:被乘數 :A+0
第二步:部分積右移1位
,得新的部分積
第三步:部分積+被乘數
…
第八步部分積右移1位
,得結果
乘法運算=加法+移位
,若乘數數值位n=4,則累加4次,移位4次;- 乘法過程
由乘數的末位決定被乘數是否與原部分積相加,被乘數只與部分積的高位相加
部分積右移一位形成新的部分積;
同時乘數右移一位(末位移丟);
空出高位存放部分積的低位 - 硬件構成
3個具有移位功能的寄存器、一個全加器
- 乘法過程
3.1 原碼並行乘法
- 1.人工算法於機械算法的同異性
在定點計算機中,兩個原碼錶示的數相乘的運算規則是:乘積的符號位由兩位的符號位按異或運算的到,而乘積的數值部分則是兩個正數相乘之積。
設n位被乘數和乘數用定點整數表示,有:
式中,xf位被乘數符號,yf爲乘數符號
例題:設x=1101,y=1011,用習慣方法求其成績過程如下:
- 2.不帶符號的陣列乘法器
●不帶符號的陣列乘法器
設有兩個不帶符號的二進制整數:
他們的數值分別爲a,b:
a,b相乘產生m+n位乘積P:
運算過程:
在m位乘n位不帶符號整數的列陣乘法中加法-移位操作的被加矩陣中,每一部分乘積項aibj叫做一個被加數。這m×n個被加數{aibj|0<=i<=m-1 和 0<=j<=n-1}可以用m×n個"與"門並行的產生。
例:兩個不帶符號的二進制整數A=11011,B=10101,求每一部分乘積項aipj的值與p9p8…p0。
- 5位×5位不帶符號的列陣乘法器邏輯電路圖:
3.2直接補碼並行乘法
- 補碼於真值的轉化公式
補碼乘法因爲符號位參與運算,可以完成不碼數的"直接乘法",而不需要求補級。這種直接的方法排除了較慢的對2求補操作,因而大大加速了乘法過程。 - 假定一個定點補碼整數[N]補=anaaa,(an是符號位)。根據[N]補的符號,補碼數和真值N的關係可以表示爲:
4.定點除法運算
-
恢復餘數法:機器在除法運算過程中,必須先進性減法,若餘數爲正,則夠減;若餘數爲負,則不夠減。不夠減時必須恢復原來的餘數,一邊繼續往下運算,這種方法被稱爲恢復餘數法。(因爲運算過程中步數不固定,控制比較複雜,在實際中並常用)
-
加減交替法:在運算過程中出現不夠減的情況時,不恢復餘數,根據餘數符號繼續往下運算。(步數固定,控制簡單)
-
4.1原碼除法原理
兩個原碼錶示的數相除時,商的符號位由兩數的符號位相加求得,商的數值部分由兩數的數值部分相除求得。
例:設被除數x=0.1001,除數y=0.1011,模仿十進制除法運算過程如下:
-
4.2並行除法器
1.可控加法/減法(CAS)單元- 和列陣乘法器類似,陣列除法器也是一種並行運算部件,採用大規模集成電路製造。與早期的串行除法器相比,陣列除法器不僅所需要的控制線路少,而且能夠提供令人滿意的高運算速度。
CAS單元的輸入與輸出關係可以用如下方程式表示:
2.不恢復餘數的陣列除法器
- 不恢復餘數的除法也稱爲加減交替法。在不恢復餘數的除法陣列中,每一行所執行的操作究竟是加法還是減法,取決於前一行輸出的符號與被除數的符號是否一致。當出現不夠減時,部分餘數相對於被除數來說要改變符號。這時應該產生一個商位"0",除數首先沿對角線右移,然後加到下一行的部分餘數上。當部分餘數不改變它的符號時,即產生商位"1",下一行的操作應該位減法。
- 和列陣乘法器類似,陣列除法器也是一種並行運算部件,採用大規模集成電路製造。與早期的串行除法器相比,陣列除法器不僅所需要的控制線路少,而且能夠提供令人滿意的高運算速度。
例題:x=0.101001,y=0.111,求x÷y。
對於一個2n位除以n位的不恢復餘數陣列除法器來說,單元的數量爲(n+1)2,考慮到最大情況下的信號延遲,其除法執行時間爲:
- 4位除4位陣列除法器邏輯結構圖:
5.定點運算器的組成
- 運算器時數據加工處理部件,是CPU的重要組成部分。其最基本結構包括:算術/邏輯運算單元、數據緩衝寄存器、通用寄存器、多路轉換器和數據總線等邏輯部件。
- 算機中的邏輯運算,主要值邏輯非、邏輯加、邏輯乘、邏輯異等四種基本運算。
5.1邏輯運算
1.邏輯非運算
求反運算。對某數進行邏輯非運算,就是按位求它的反,常用變量上方加一橫來表示。
例題:
2.邏輯加運算
對兩個數進行邏輯加,就是按位求它們的"或",所以邏輯加又稱邏輯或,常用記號"+",來表示。
例題:
3.邏輯乘運算
對兩數進行邏輯乘,就是按位求它們的"與",所以邏輯乘又稱邏輯與。
例題:
4.邏輯異運算
對兩數進行邏輯異就是按位求它們的模2和,所以邏輯異又稱爲位加。
例題:
定點運算和浮點運算扽結構複雜度不同。早期微型機中浮點運算器放在CPU芯片外,隨着高密度集成電路技術的發展,現已移至CPU內部。
6.浮點運算方法和浮點運算器
- 6.1 浮點加法、減法運算
設兩個浮點數x和y,它們分別爲:
其中,Ex和Ey分別是數x和y的階碼,Mx和My爲數x和y的尾數。
兩浮點數進行加減運算的運算規則是:
完成浮點數加減運算的操作過程大體分爲四步:
①:0操作數檢查
②:比較階碼大小,並進行對階
③:尾數進行加或減運算
④:結果規格化,並進行舍入處理
大致操作流程如下:
(1).0操作數檢查
浮點加減運算比較複雜。如果判知兩個操作數x或y中有一個數爲0,即可得知運算結果而沒有必要在進行一系列操作,以節省操作時間。
(2).比較階碼大小並完成對階
兩浮點數進行加減,首先要看兩數的階碼是否相同,即小數點位是否對齊。若兩數階碼相同,表示小數點是對齊的,就可以進行尾數的加減運算。反之,若兩位階碼不同,表示小數點爲沒有對其,此時必須使兩位的階碼相同,這個過程叫做對階。
要對階首先要求兩階碼之差:
△E=Ex-Ey
若△E相等則表示兩數階碼相等,Ex=Ey
若△E>0,Ex>Ey
若△E<0,Ex<Ey
在浮點數對階時總是遵循小階向大階看齊原則,小階的尾數向右移位(相當於小數點向左移位),每右移一位階碼加1,直到兩數的階碼相等爲止,右移的位數等於階差△E。
(3).位數求和運算
對階結束後,即可進行尾數的求和運算。不論是加法運算還是減法運算,都按加法進行操作,其方法與定點加法完全一致。
(4).結果規格化
在浮點加減運算中,尾數的求和結果也可能得到01. &…&或 10. &…&,即兩符號位不相等,這表示位數求和結果的絕對值大於1,向左破壞了規格化。此時應該將尾數運算右移以實現規格化表示,稱爲向右規格化,既尾數右移1位,階碼加1.當尾數不是1.M時需要向左規格化。
(5).舍入處理
再對階或向右規格化時,尾數要向右移位,這樣,被右移的尾數的低位部分會被丟掉,從而造成一定誤差,因此要進行舍入處理。
-
IEEE745標準中舍入處理的四種辦法:
- 就近舍入:其實質就是四捨五入,例如。尾數超過規定的23位的多餘位數字時10010,多餘位多餘位的值超過規定最低有效位值的一半,故最低有效位值增1。如果是01111,則直接截尾就行了。像10000這種特殊情況看最低位爲1還是0,若爲0則截尾,若爲1則進1。
- 朝0舍入:朝着數軸原點方向舍入,即簡單的截尾。
- 朝+∞舍入:對正數來說,直接進一;對於負數來說,直接截尾。
- 朝-∞舍入:處理方法和+∞正好相反。
-
溢出處理:
- 浮點數的溢出是以其階碼溢出變現出來的。在加減運算過程中要檢查是否產生溢出:若階碼正常,加減運算正常結束;若階碼溢出,則進行相應的處理。另外對尾數的溢出也需要處理。
階碼上溢:超過了階碼可能表示的最大值的正指數值,一般將其認爲是+∞和-∞。
階碼下溢:超過了階碼可能表示的最小值的負指數值,一般將其認爲是0。
尾數上溢:兩個同符號尾數相加產生了最高位向上的進位,要將尾數右移,階碼增1來從新對齊。
尾數下溢:在將尾數右移是,尾數的最低位從尾數域右端流出,要進行舍入處理。
- 浮點數的溢出是以其階碼溢出變現出來的。在加減運算過程中要檢查是否產生溢出:若階碼正常,加減運算正常結束;若階碼溢出,則進行相應的處理。另外對尾數的溢出也需要處理。
-
6.2 浮點乘法、除法運算
設兩個浮點數x和y,它們分別爲:
其中,Ex和Ey分別是數x和y的階碼,Mx和My爲數x和y的尾數。
兩浮點數進行乘法運算的運算規則是:
兩浮點數進行除法運算的運算規則是:
-
在乘法運算中,乘積的尾數是相乘兩數的尾數之積,乘積的階碼是相乘兩數的階碼之和。
-
在除法運算中,商的尾數是相除兩數的尾數之商,商的階碼是相乘兩數的階碼之差。
完成浮點數乘除運算的操作過程大體分爲六步:
①:0操作數檢查,如果被除數x爲0,則商爲0,如果除數y爲0,則商爲∞;
②:階碼加減操作;
③:尾數乘除操作;
④:結果規格化;
⑤:進行舍入處理;
⑥:確定積的符號;
大致操作流程如下:
(1).浮點數的階碼運算
浮點數除法中.對階碼的運算由+1,-1,兩階碼求和,兩階碼求差四種,運算時必須檢查結果是否溢出.
(2).尾數處理
浮點數加法對結果的規格化及舍入處理也適用於浮點乘除法.
第一種簡單辦法是,無條件第丟掉正常尾數最低位之後的全部數值(截斷處理)
第二種辦法是,運算過程中右移中移出的若干高位值,最後按某種規則用這些位上的值來修正尾數(舍入處理)