計算機組成原理:定點數和浮點數、校驗碼

1、定點數和浮點數

小數點在計算器中並沒有專門的器件進行存放。根據小數點的位置是否固定,可將數字分爲定點數浮點數

定點數

定點數是小數點位置固定的數,小數點的位置由事先約定。同一種定點數的機器碼中,每一位的權值都是相同的。
約定小數點在最低數值位之後的定點數稱爲定點純整數;在最高數值位之前的稱爲定點純小數。採用定點數的機器稱爲定點機
設8位機器碼,其中最高位爲符號位
對於定點整數機
原碼和反碼的數值範圍:-27 + 1 ~ 27 - 1
補碼的數值範圍:-27 ~ 27 - 1
對於定點小數機
原碼和反碼的數值範圍:-1 + 2-7 ~ 1 - 2-7
補碼的數值範圍:-1 ~ 1 - 2-7

當數值超出定點數所能表示的範圍時,稱爲溢出

浮點數

浮點數是小數點位置不固定的數。
浮點數在計算機中由兩個部分組成:階碼尾數
在這裏插入圖片描述
其中,尾數表示數值的有效數字,階碼指出小數點的位置。
對於階碼共k + 1位,尾數共n + 1位的浮點數(均包含符號):
最大正數:(1 - 2-n) * 22^k-1
最小負數:-1* 22^k-1
絕對值最小的數(除0外):± 2-n * 2-2^k

階碼和尾數均以補碼錶示。

規格化浮點數

由於一個數值可以有多個不同的浮點數加以表示,爲了規範數值的表示,應當以一定的條件加以約束,稱爲規格化浮點數
規格化浮點數的約束條件:對於尾數M,應有0.5 ≤ |M| ≤ 1
對於原碼,其最高數值位一定爲1。
對於補碼,其符號位與最高數值爲互異。

IEEE-754標準

IEEE-754標準定義了三種浮點數的基本格式:單精度格式雙精度格式擴展精度格式

對於單精度和雙精度格式,IEEE-754標準規定小數點左邊隱含一位,作爲整數的個位數。該位規定爲1,不需要存儲,自動計算。由於隱含位在個位上,相比於規格化浮點數的標準左移了一位,因此階碼需要-1以匹配。

對於階碼,實際爲移碼-1;或者可以使用原碼+偏移量計算
單精度格式:階碼位數爲8,尾數數值位數爲23,總32位
雙精度格式:階碼位數爲11,尾數數值位數爲52,總64位
擴展精度格式:階碼位數爲15,尾數數值位數爲64,總80位

由於隱含位,單精度和雙精度格式的尾數實際尾數分別爲24和53。

對於單精度格式,階碼取值範圍是-126 ~ 127。

這個地方也是我不太明白的一點。經過查找資料後個人的理解是:階碼全0和全1是特殊情況;全0對應的補碼是10000001,爲-127,全1對應的補碼是10000000,爲-128。因此這兩個取值應該排除。從偏置常數看,-127和-128偏置後爲0和-1,無法用8位機器碼錶示。

IEEE-754標準的浮點數公式: V = (-1)ms * 22^E-127 * M
十進制轉單精度步驟:1) 轉二進制 2) 規格化 3) 求階碼 4) 拼接 5)*四合一轉十六進制
單精度轉十進制步驟: 1)* 一拆四轉二進制 2)分段 3)求階碼的原碼 4)計算真值

2、校驗碼

在數據的存取傳送過程中,由於外界高頻的干擾、設備的間歇性故障、電源偶然的瞬變現象等原因,會發生錯誤。爲了減少這種錯誤,除了提高硬件本身的可靠性外,通常是通過增加一些冗餘碼,使合法數據編碼出現某些錯誤,稱爲非法碼,來檢測錯誤。碼距是任意兩個編碼間互異的位數。碼距爲2的的校驗碼才具有糾錯能力。

奇偶校驗碼

有效信息加上一位校驗碼,可以形成奇偶校驗碼。這是最簡單的一種校驗碼。
奇校驗:加上校驗位後,校驗碼爲1的位數是奇數。 ~C = x1 ⊕ x2 ⊕ … ⊕ xn (奇數個1和任意個0異或得1;偶數個1得0)
偶校驗:加上校驗位後,校驗碼爲1的位數是偶數。 C = x1 ⊕ x2 ⊕ … ⊕ xn
奇偶校驗碼能檢查一位出錯,但不能判斷出錯的位置。

海明校驗碼

海明校驗碼是一種能夠定位一位出錯,並能發現兩位出錯的校驗碼,且能恢復一位出錯位的校驗碼。
設有效碼共k位,校驗位共r位,若需要定位一位錯誤,則有海明不等式1:2r ≥ k + r + 1;(k+r位可能出錯,加上正確情況)
若還需要檢查兩位錯誤,則有海明不等式2: 2r-1 ≥ k + r。 (需要其它情況表示2位出錯)

海明校驗碼碼編碼規則

  1. 設海明校驗碼最高位爲m,最低位爲1,則海明校驗碼可以表示爲:H(m)H(m-1)…H(1)
    其中,H(2i-1)由校驗位R(i)佔據,剩餘位置由有效碼K(i)由小到大佔據;若不存在H(2i-1),則R(i)佔據最高位。
    例如十三位海明校驗碼(其中5位校驗位,8位有效碼): R(5)K(8)K(7)K(6)K(5)R(4)K(4)K(3)K(2)R(3)K(1)R(2)R(1)
  2. 每一個海明校驗碼的位號,等於檢驗他的校驗位位號之和。例如H(3):3 = 2 + 1;因此H(3)由H(2)和H(1)校驗。相當於每一個校驗位,都是被其校驗的有效碼的奇偶校驗位

有效位的位號必須等於校驗位位號和;校驗位位號之和就等於本身。

  1. 以偶校驗爲例,可以得到方程組:
    P1 = D1 ⊕ D2 ⊕ D4 ⊕ D5 ⊕ D7
    P2 = D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7
    P3 = D2 ⊕ D3 ⊕ D4 ⊕ D8
    P4 = D5 ⊕ D6 ⊕ D7 ⊕ D8
    P5 = D1 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8 ⊕ P1 ⊕ P2 ⊕ P3 ⊕ P4 (令最高位等於所有其它海明碼異或)
    利用該方程組,可以形成海明校驗碼。

檢錯時,令校驗位與需要檢驗的校驗碼做異或運算,可以得到方程組:
S1 = P1 ⊕ D1 ⊕ D2 ⊕ D4 ⊕ D5 ⊕ D7
S2 = P2 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7
S3 = P3 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D8
S4 = P4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8
S5 = P5 ⊕ D1 ⊕ D2 ⊕ D3 ⊕ D4 ⊕ D5 ⊕ D6 ⊕ D7 ⊕ D8 ⊕ P1 ⊕ P2 ⊕ P3 ⊕ P4
顯然,如果該位沒有出錯,則相當於自身與自身做異或運算,結果必然爲0
反之,若某一個校驗結果爲1,說明該位所校驗的數據出錯
若僅考慮一位出錯和兩位出錯,有如下幾種情況:
1、S1~S5全爲0:數據無錯誤;
2、S5 = 0;S1~S4不全爲0:有兩位出錯;
3、S5 = 1;S1~S4全爲0:P5出錯;
4、S5 = 1;S1~S4僅一位爲1:對應的那一位校驗位出錯;如S1 = 1,說明P1出錯;
5、S5 = 1;S1~S4多位爲1:可通過出錯的S的共同檢驗元素,定位出錯的位置;如S1,S2 = 1,說明D1出錯。

循環冗餘碼(CRC碼)

CRC碼可以發現並糾正信息存儲或傳送過程中連續出現的多位錯誤,因此在磁介質存儲和計算機之間通信方面得到廣泛應用。
CRC碼由k位信息碼後接r位校驗位組成,利用模2運算規律。

CRC碼編碼規則

  1. 將信息碼錶達爲多項式M(x) = Ck-1 * xk-1 + … + C1 * x1 + C0;
  2. 將信息碼左移r位,得到M(x) * xr = Ck-1 * xk+r-1+ … + C0 * xr
  3. 用M(x) * xr 除以用以生成多項式 G(x),所得餘數作爲校驗位。爲使校驗碼爲r位,由模2運算的規律可知,G(x)必爲 r + 1位。
  4. 設上一步的運算中所得商爲Q(x),所得餘數爲R(x),將R(x)拼接至M(x) * xr 右邊空出的r位上,構成該信息的CRC碼。
    該CRC碼 M(x) * xr + R(x) = [Q(x) * G(x) + R(x)] + R(x) = Q(x) * G(x) + 2R(x);
    由模2加法,2R(x)應爲0;因此上式 = Q(x) * G (x),也即該CRC碼必能被G(x)除盡。

檢錯時,用得到的CRC碼除以生成多項式G(x),如果未出錯,應得到餘數0;不同位出錯時,餘數不同。可以證明,在碼制和生成多項式不變時,餘數與出錯位的關係是不變的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章