計算機組成原理——數據的機器級表示

數據的機器級表示

|| 數制與編碼

原碼、補碼、反碼和移碼。
通常將數值數據在計算機內部編碼表示的數稱爲機器數,而機器數真正的值(即現實世界中帶有正負號的數)稱爲機器數的真值。

  • 原碼

    一個數的原碼錶示由符號位直接後跟數值位構成,因此,也稱“符號-數值” (sign and magnitude)

    缺點是 0 的表示不唯一,給使用帶來不便。更重要的是,原碼加減運算法則複雜。在進行原碼加減運算過程中,要判定是否是兩個異號數相加或兩個同號數相減,若是,則必須判定兩個數絕對值大小,根據判斷結果決定結果符號,並用絕對值大的數減去絕對值小的數。所以現代計算機中不用原碼來表示整數,只用定點原碼小數來表示浮點數的尾數部分。

  • 補碼

    補碼可以實現加減運算的統一,用加法來實現減法運算。

    正數的補碼是它本身,負數的補碼等於模與該負數絕對值之差。

※ 真值——> 補碼?

正數爲本身;負數爲各位取反加1;

在這裏插入圖片描述

※ 補碼——>真值?

符號位爲0那麼真值就是其本身;符號位爲1說明此數是負數,那麼將數值位各位取反加1,符號位負。

在這裏插入圖片描述

※ 如何根據【Xt】補 求【-Xt】補?

在這裏插入圖片描述
(注意最小負數取負後會溢出,參考補碼的表示範圍就能理解這裏的原因了!)

  • 移碼

    主要用於表示浮點數的指數部分,方便對階。
    在這裏插入圖片描述

|| 整數的表示

  • 無符號整數的表示
    編碼的所有二進位都用來表示數值
  • 帶符號整數的表示
    補碼錶示;範圍是 -2^(n-1) ~ 2^(n-1)-1

|| 實數的表示

計算機內部進行數據存儲、運算和傳送的部件位數有限,因而用定點數表示數值數據時,其表示範圍很小。對n位帶符號數,其表示範圍爲-2^(n-1) ~ 2^(n-1)-1 ,運算結果很容易溢出,此外,用定點數也無法表示大量帶有小數點的實數。

  • IEEE754 (浮點數的規格化)

在這裏插入圖片描述

在這裏插入圖片描述
##############################

  • 例題
    在這裏插入圖片描述
    #############################
  • IEEE754 (浮點數的具體解釋)

在這裏插入圖片描述

在這裏插入圖片描述

|| 數據的寬度和存儲

在這裏插入圖片描述
在這裏插入圖片描述

|| 數據校驗碼

數據在計算機內部進行計算、存取和傳送過程中,由於元器件故障或噪音干擾等原因會出現差錯。爲了減少和避免這些錯誤,一方面要從計算機硬件本身的可靠性入手,在電路、電源、佈線等各方面採取必要的措施,提高計算機的抗干擾能力;另一方面要採取相應的數據檢錯和校正措施,自動地發現並糾正錯誤。

在這裏插入圖片描述
在數據校驗碼中,一個碼字是指數據位和校驗位按照某種規律排列得到的代碼。將兩個碼字逐位比較,具有不同代碼的位的個數叫做這兩個碼字間的距離,也成爲海明距離。
在這裏插入圖片描述

  • 奇偶校驗碼

    使用步驟:

在這裏插入圖片描述
碼距是2,它只能發現奇數位出錯,不能發現偶數位出錯,而且也不能確定發生錯誤的位置,不具有糾錯能力。但是奇偶校驗法所用的開銷小,它常被用於存儲器讀寫檢查或按字節傳輸過程中的數據校驗。因爲一字節長的代碼中一位出錯的概率相對較大,兩位以上出錯則很少,所以奇偶校驗碼用於檢驗一字節長的代碼還是很有效的。

  • 海明校驗碼

    海明校驗碼實質上就是一種多重奇偶校驗碼。

^ 校驗位的位數的確定

在這裏插入圖片描述

^ 分組方式的確定

在這裏插入圖片描述
在這裏插入圖片描述
^ 檢驗位的生成和檢錯、糾錯

在這裏插入圖片描述
例:

在這裏插入圖片描述
在這裏插入圖片描述

|| 第二章作業

在這裏插入圖片描述
(更改數據:R1——0000017A R2——FFFFF895)

解:
(1)無符號
R1=(17A)H R2 = (FFFFF895)H

(2)帶符號
R1 = (0000 0000 0000 0000 0000 0001 0111 1010)2
R2 = (1111 1111 1111 1111 1111 1000 1001 0101)2
可以看出R1爲正數,所以真值就是他本身 (17A)H
R2爲負數,現在需要把補碼的形式轉換爲它的真值
R1 = -(0000 0000 0000 0000 0000 0111 0110 1010+1) 2 =
-(0000 0000 0000 0000 0000 0111 0110 1011)2 = -(76B)H

(3)單精度浮點數
R1 = (0 00000000 0000 0000 0000 0010 1111 010)
根據規則,階碼全0,尾數非0的是非規格化數。
0.0002F4 H * 2^(-126)

R2 = (1 11111111 11111111111100010010101)
全1階碼非0尾數 NaN

在這裏插入圖片描述

設一個變量的值爲-6144 ,要求分別用32位補碼整數和IEEE754單精度浮點格式表示該變量(結果用十六進制表示),並說明哪種表示其值完全正確,哪種表示是近似值?

解: (6144)10 = (0000 0000 0000 0000 0001 1000 0000 0000)2
(-6144)10= (1111 1111 1111 1111 1110 0111 1111 1111+1)=
(1111 1111 1111 1111 1110 1000 0000 0000)=(FFFFE800)H

浮點數:-1.1 * 2^12
階碼:(12+127)=(1000 1011)2
尾數1000 0000 0000 0000 0000 000
是 1100 0101 1100 0000 0000 0000 0000 0000
(C5C00000)H

假定在一個程序中定義了變量x、y和i,其中,x和y是float型變量(用IEEE754單精度浮點數表示),i 是16位 short 型變量(用補碼錶示)。程序執行到某一時刻,x = -10.125 , y = 12 , i = -125 它們都被寫入到了主存(按字節編址),其地址分別是 100、108 和 112。請分別畫出在大端機器和小端機器上變量 x 、y 和 i 在內存的存放位置。

先處理數據:
x = -1.01001 * 2^3
階碼: (3+127) = (1000 0010)
尾數: 0100 0100 0000 0000 0000 000
符號:1
x = 1100 0001 0010 0010 0000 0000 0000 0000
(C1 22 00 00)H

y = 1.100 * 2^3
階碼: (3+127)=(1000 0010)
尾數: 1000 0000 0000 0000 0000 000
符號: 0
y = 0100 0001 0100 0000 0000 0000 0000 0000
(41 40 00 00)H

125 = ( 0000 0000 0111 1101)
-125 = (1111 1111 1000 0011)=(FF 83)H

大端方式: 小端方式:
100 C1 00
101 22 00
102 00 22
103 00 C1

108 41 00
109 40 00
110 00 40
111 00 41
112 FF 83
113 83 FF

在這裏插入圖片描述
(修改:採用偶校驗碼,接收校驗位 1010)

解:
傳輸信息 : 10001111 00111100 10101011 10010110
校驗位 1010

接收信息 10000111 00111100 10101011 10010110
P^ 0010

P^^ = 1000 說明數據的第一個字節發生錯誤,對照傳輸前後,8F變成了87,說明確實發生了傳輸錯誤,驗證正確。

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