2、數據的表示與運算測試
數據如何表示,運算器如何運算,算的過程如何用電路和硬件來實現。編碼
運算器設計
考綱要求指針
1.10、2、8、十六進制數及其相互轉換。真值和機器數之間的關係以及BCD碼、字符與字符串編碼、效驗碼。blog
(重點)數據的表示原碼、反碼、補碼、移碼以及他們之間的關聯與區別。字符串
2.定點數的表示,定點數位移運算、原碼定點數加/減運算、補碼定點數的加減運算、定點數乘/除運算、溢出概念和判別方法。基礎
3.浮點數的表示(浮點數的表示範圍和IEEE754標準)和浮點數的加/減運算。原理
4.串行加法器和並行加法器、算術邏輯單元ALU的功能和結構。擴展
定點數的表示硬件
定點表示:約定機器中全部數據的小數點位置固定不變。因爲約定在固定位置,小數點就再也不使用記號「.」來表示。
一般將放到數值位最後面或者最前面,這樣的數據表示成純整數或純小數。
1 無符號數的表示
用所有二進制代碼表示表示數字,沒有符號位。
8位二進制無符號數的範圍
( 00000000~11111111) 0~2^8-1 (0~255)共256個數
問:爲啥是2^8-1?
答:
1111 1111
最低位是 最高位是
1*2^0 ~ 1*2^7
s8 = 1*(1-2^8)/(1-2)
= 2^8-1
或者能夠理解爲加一位是1 1111 1111 是1*2^8 -1。
2. 有符號數的表示方法
定點數 x= x0 x1 x2 … xn 在機中表示以下(x0爲符號位,0表明正號,1表明負號)
對於小數的表示:
小數點位置默認省略掉。
純小數的表示範圍
(x0 x1 x2 … xn 數值位各位均爲0時絕對值最小;數值位各位均爲1時絕對值最大)
即這些數爲: -0.11……1 <= x <= +0.11……1
|n個1| |n個1|
上結論:
0<= | x | <= 1-2^-n
-(1-2^-n) <= | x | <= 1-2^-n
結論是怎麼獲得的呢?
答:
用八位二進制
2.純整數的表示
純整數的表示範圍爲
(x0 x1 x2 … xn 數值位各位均爲0時 絕對值最小;數值位各位均爲1時絕對值最大)
結論:
-(2^n-1) <= x <= 2^n -1 (1後面n個0)
0 <= |x| <=2^n-1
即 -11……1 <= x <= + 11……1
好比說32位二進制數,符號位佔了一位 數值位佔了31位,
問:
機器字長爲32位,定點表示時,數符1位,尾數31位。
則:定點整數表示時,
最大正數值 = _________2^31 - 1______________, (011……1)
最小負數值 = ________-2^31 - 1______________。 (11……1)
定點小數表示時,
最大正數值 =__________1 – 2^-31____________, (01……1)
最小負數值 =________-(1 – 2^-31)___________。 (11……1)
十進制加法器可由BCD碼(二-十進制碼)來設計,它能夠在二進制加法器的基礎上加上適當的」校訂」邏輯來實現,該校訂邏輯可將二進制的」和」改編成所要求的十進制格式。
爲了便於計算機的運算,必須對二進制的定點數進行合適的編碼。
下面講定點數的機器碼錶示:
原碼就是數值的真值(絕對值)前面加上一個絕對值(正數0、負數1)。
若定點小數的原碼形式爲x0 x1 x2 … xn ,則原碼錶示的定義是
[x]原 = 0 + |x| = x (1 > x >= 0)
1 + |x| = 1-x (0 >= x >-1)
式中[x]原式機器數,x是真值
例如, x = + 0.1001,則 [x]原 = 0.1001
x = - 0.1001,則 [x]原 = 1.1001
對於0,原碼機器中每每有」+0」、」-0」之分,故有兩種形式:
[+0]原 = 0.000…0
[-0]原 = 1.000…0
一個n+1位(包括數值位和符號位)定點小數原碼的表示範圍是
-0.111…11 ~ +0.111…11
| n位 | | n位 |
-( 1 – 2^-n) <= x <= 1-2^n
若 定點整數 的原碼形式爲 x0 x1 x2 … xn, 則原碼錶示的定義是
[x]原 = 0 + | x | = x 2^n > x >=0
2^n + | x | = 2^n-x 0 >= x > -2^n
n+1位定點整數原碼的表示範圍是
-111…11 ~ + 111… 11
| n位 | | n位 |
-(2^n – 1) <= 2^n -1
對於0,原碼機器中每每有」+0」、」-0」之分,故有兩種形式:
[+0]原 = 0000…0
[-0]原 = 1000…0
n+1位定點整數原碼的表示範圍
-(2^n - 1) <= x <= 2^n -1
思考: n+1位定點整數原碼能表示多少個數?有幾個編碼?
例如:1個字節8位,2^8 = 256
1位符號位,7位數值位,-127~+127 255個 由於0佔了兩個編碼
(1) x和-x的原碼轉換
將[x]原的符號位(左端第一位)取反,既可獲得[-x]原。
(2) 原碼中0的表示不惟一。
純小數: [+0]原 = 0.00…0, [-0]原 = 1.00…0
純整數: [+0]原 = 00…0, [-0]原 = 100…0
(3) 若原碼字長位n,總共有2^n個編碼,但對應的真值只有2^n-1個。
由於[0]原佔用了兩個編碼,所以原碼錶示範圍較小(2^n個編碼只能表示2^n-1個真值)。注意與補碼的不一樣。
(4) 若原碼字長位n,總共有2^n個編碼,但對應的真值只有2^n個。
由於[0]原佔用了兩個編碼,所以原碼錶示的範圍較小(2^n個編碼只能表示2^n-1個真值)。注意與後面補碼的差別。
(5) 負數原碼形式上大於正數的原碼:
對於定點小數,當x>0時 0<[x]原<1;
當x<0 時 1<[x]原<2。
對於定點正數,當x>0時, x<[x]原<2^n-1;
當x<0 時, 2^n-1<[x]原<2^n。
(6) 原碼的移位規則:
符號位不變,數值部分左移或右移,移出的空位填」0」。(左移一位至關於乘以2,右移一位至關於除以2)
優勢:原碼簡單易懂,與真值轉換容易,實現乘除法方便。
(乘除法數值位由兩束的絕對值相乘/除獲得,符號位由兩束的符號位異或便可);
不足:1.原碼中0的表示由兩種,給使用帶來了不便。
2.原碼錶示的加減法運算複雜,這是由於:當兩數相加時若是時同號則數值相加,若是是異號,則進行減法。
2.補碼錶示法
舉例1:假設如今的標準時間位4點正;而有一隻表已經7點了,爲了校準時間,能夠採用兩種方法:
將時針退7-4 = 3格;
將時針向後撥9格,7+9(mod 12) = 4。
這兩種方法都能校準到4點。
減3和加9是等價的,即9是(-3)對12的
-3 = +9(mod12)
7-3和7+9(mod 12)等價,緣由就是表指針超過12時,將12自動丟掉,最後獲得16-12=4。從這裏能夠獲得一個啓示,就是負數用補碼錶示時能夠把減法轉換爲加法。
7-3和7+9(mod 12) 等價,9稱爲-3對12的補碼即:
補碼的定義就是(mod+真值)
[X]補 = M + X(Mod M)
正數的補數等於自己。
負數的補碼等於模與該數絕對值之差。
補碼的性質:
(1) 幾個特殊數值的補碼錶示:
0的補碼錶示
補碼的表示範圍比原碼範圍大
純小數補碼比原碼多表示一個-1
純整數補碼比原碼多表示一個-2^n
這個多表示的數來自於-0,將-0表示爲上面的兩個數。
因此,補碼的表示範圍:
8位正數/1位是符號位 7位是數值位
原碼 -127~+127 255個數
補碼 -128~+127之間 256個數
(3)補碼和原碼的關係
對於正數直接取其二進制數的表示構成補碼。
即 若x>=0,[x]原=[x]補。
若 x<0 符號位不變,各位求反後最低位+1。
注意:補碼中特殊數-1(純小數)和-2^n(純整數)的表示,在原碼中沒有對應表示。
(4)[x]補 和 [-x]補 的關係
·已知[x]補,將[x]補的各位(含符號位)取反,而後在最低位上加1,即獲得[-x]補。反之亦然。
(5)補碼的算數移位規則:
補碼的左移(乘2):符號位不變,數值部分左移,最低位移出的空位填0;
補碼的右移(除2):符號位不變,數值部分右移,最高位移除的空位填符號位。
(6)負數補碼形式上大於正數的補碼:
與原碼相似
(7)補碼的位擴展
例如將字節(8位二進制)表示的補碼擴展位16位二進制表示的補碼。
定點小數:在最低位用0擴展。
定點整數:在最高位用符號位擴展。
經常使用求補碼的方法(與定義求補碼比較):
若x<0 則將x絕對值的各位取反,而後再最低位上加1,符號位求1,即獲得[x]補
若x<0,數值位從最低位開始,對遇到的0和第一個1取其原來的代碼,對第一個之後開始直至最高爲均按位取反,符號位爲1
3.反碼錶示法
二進制的各位數碼0變爲1,1變爲0.
反碼自己就是一個求補碼的中間環節。
反碼的主要做用就是求補碼
對 定點小數,反碼錶示的定義爲
[x]反 = x (1 > x >= 0) (mod(2-2^-n))
(2-2^-n) + x (0 >= x > -1)
其中n表明數的位數。
反碼實質上是一種特殊的補碼,其特殊支出在於反碼的模比補碼的模小一個最低位上的1。
對於0,有[+0]反和[-0]反之分
[+0]反 = 0.00…0
[-0]反 = 1.11…1
對於定點整數,反碼錶示的定義爲
[x]反 = x 2^n > x >= 0
(2^n-1 – 1 ) + x 0 >= x > -2^n
反碼的特色:
1) 在反碼錶示中,用符號位x0表示正負,形式與原碼錶示相同,0爲正,1爲負
2) 反碼中,0 有兩種表示形式
純小數: [+0]反 = 0.00…0 [-0]反=1.11…1
3) 反碼的表示範圍與原碼相同。注意,純小數的反碼不能表示爲-1,純整數的反碼不能表示爲-2^n
4.移碼錶示法
補碼錶示很難直接判斷其真值大小。
浮點數的階碼是用移碼來表示的。
人的直覺會以爲後面的比前面的大,然而並非這樣,也並無什麼卵用。
移碼
模的指數比補碼少1.
2^n+1次方
2^n次方
移碼一般用於表示浮點數的階碼。因爲階碼是個n位的正數,假定定點整數移碼形式位x0,x1,x2..xn時,
對定點整數,移碼的傳統定義是n位數值真值加上一個固定常數2^n
[x]移 = 2^n + x 2^n > x >= -2^n
對定點小數,移碼的傳統定義是真值加上一個固定常數1
[x]移 = 1+x +1 > x >= -1
若階碼數值部分爲7位,以x表示真值,則
[x]移 = 2^7 + x = 128 + x 128 > x >= -128
例如,當正數 x = +1010101時,
[x]移 = 2^7 + 1010101
= 1,0000000 + 1010101
= 1,1010101;
當負數 x = -1010101時,
[x]移 = 2^7 + x = 2^7 – 1010101
= 10000000 – 1010101
= 0,0101011
移碼中的逗號不是小數點,而是表示左邊一位是符號位。
移碼中符號位x0表示的規律與原碼、補碼、反碼相反(0表示負1表示正)
(1)移碼的幾何性質
移碼錶示的實質是把真值映像到一個正數域,所以移碼的大小能夠直觀的反應真值的大小。
無論整數仍是負數,用移碼錶示時,能夠按無符號數比較大小。
(1) 移碼中」0」的表示
移碼中」0」的表示是惟一的
[+0]移 = [-0]移 = 2^n+- 0 … 0 = 10…0 (純整數)
移碼的表數範圍與補碼一致。
純整數移碼錶示的最小數能夠表示到-2^n
(2) 移碼與補碼的關係
x>=0 時,[x]補=x,[x]移=2^n+x [x]移 = [x]補 + 2^n
x< 0 時, [x]補 = 2^(n+1) + x , [x]移 = 2^n + x , [x]移 = 2^n + [x]補 – 2^n+1
= [x]補 – 2^n
x = + 1011010
[x]補 = 01011010
[x]移 = 2^n+x = 2^7+1011010 = 11011010
(3) 移碼的符號位:
0表示負數,1表示正數,和原碼、反碼、補碼不一樣。
(4) 移碼與真值的線性關係:
移碼的順序和真值徹底一致,所以移碼在表示階碼時能夠方便的進行大小的比較,其結果與真值一致。
答:是32位機器,因此int類型是32位,y爲短整形16位,
z = x + y
加減運算必定是補碼運算
127 = 01111111 真值
è 0000,0000,0000,0000,0000,0000,0111,1111 = 0000007FH
-9 = 11001
-> 10111 -> 1111,1111,1111,0111 = FFF7H
127+(9)= 118 = 01110110
8位
1個符號位 7個數值位
表示範圍是-128~+127
答案選B。
效驗碼
元件故障\噪聲干擾等各類因素經常致使計算機在處理信息過程當中出現錯誤。爲了
防止錯誤,可將信號採用專門的邏輯線路進行編碼以檢測錯誤,甚至校訂錯誤。一般的方法是,在每一個字上添加一些校驗位,用來肯定字中出現錯誤的位置。
組成奇偶校驗碼的基本方法:在n位有效信息位上增長一個二進制校驗位,構成一個n+1位奇偶校驗碼。
奇校驗:使n+1位的奇偶校驗碼中的1的個數爲奇數。
偶校驗:使n+1位的奇偶校驗碼中的1的個數爲偶數。
B.海明校驗碼
海明校驗實質上是一種多重奇偶校驗。它將有效信息按某種規律分紅若干組,每組安排一個校驗位做奇偶測試,就能提供多位檢錯信息,以指出最大多是哪位出錯,從而將其糾正。
2.2.2 定點數的運算
定點加法減法運算
補碼加法
負數用補碼錶示後,能夠和正數同樣來處理。
當須要減去一個x時能夠用加上x對應的負數的補碼[-x]補來代替。
這樣,運算器裏只須要一個加法器就能夠了,沒必要爲了負數的加法運算,再配一個減法器。
補碼運算的基本規則:
2.2.23 溢出概念與檢測方法
兩個正數相加,結果大於機器所能表示的最大正數,稱爲上溢,而兩個負數相加,結果小於機器所能表示的最小負數,稱爲下溢。
爲了判斷」溢出」是否發生,可採用兩種檢測的方法。第一種方法是採用雙符號位法。
雙符號位法又稱變形補碼,符號位又兩位用」00」表示正,「11「表示負。
*瞭解
2.2 定點乘法運算
2.2.1 原碼一位乘法
1.分析筆算乘法
A=-0.1101 B = 0.1011
0.1101
X 0.1011
_____________
1101
1101
0000
1101
0.10001111
乘積的符號心算求得
符號位單獨處理
乘數的某一位決定是否加被乘數
4個積一塊兒相加
乘積的位數擴大一倍
乘法改進
A*B = A* 0.1011 = A*(0.1+0.00+0.001+0.0001)
= 0.1*A + 0.00*A + 0.001*A + 0.0001*A
= 0.1{A+0.1[0*A+0.1*(A+0.1*A)]}
乘->移+加
[乘積] 0
小結
乘法 運算可用 加和移位實現
n = 4, 加4次,移4次
由成熟的末位決定被乘數是否與原部分積相加,而後à1位造成新的部分積,同時乘數->1位(末位移丟), 空出高位存放部分積的低位。
被乘數只與部分積的高位相加
硬件: 3個寄存器,具備移位功能。
1 個全加器
2.4 定點除法運算
2.4.1 原碼除法運算原理
機器的運算過程和人不一樣,人會心算,一看就知道夠不夠減。
但機器卻不會心算,必須先做減法。
若餘數位正,才知道夠減;若餘數位負,才知道不夠減。
不夠減時必須恢復原來的餘數,以便再繼續往下運算。這種方法稱爲恢復餘數法。
要回復原來的餘數,只要當前的餘數
恢復餘數法
餘數爲正 商1
餘數爲負 商0,恢復餘數
因爲要恢復餘數,使除法進行過程的步數不固定,所以控制比較複雜。
2.浮點數的表示方法
騷操做
2.6.1 浮點加法、減法運算
(3)尾數求和運算
(4)結果規格化
2.5算數邏輯單元ALU
2.5.1多功能算數/邏輯運算單元(ALU)
由一位全加器(FA)構成的行波進位加法器,它能夠實現加法運算和減法運算。
可是這種加法/減法器存在兩個問題:
一是因爲串行進位,它的運算時間很長。
假如加法器由n位全加器構成,每一位的進位延遲時間爲20ns,那麼最壞狀況下,進位信號從最低位傳遞到最高爲而最後輸出穩定,至少須要nX20ns這在高速計算中顯然是不利的