計算機組成與體系結構-資料的表示-碼制

wangchunbo發表於2020-07-08

在計算機中,資料編碼方式可以有多種,最為常見的有原碼、反碼、補碼、移碼。一個正數的 原碼、補碼、反碼是相同的,負數則不同。

原碼

二進位制

一般8位,

將最高位用做符號位(0表示正數,1表示負數),其餘各位代表數值本身的絕對值的表示形

式。這種方式是最容易理解的。

例如 +1的原碼是00000001,–1的原碼是10000001。

因為是8位數。 首位為正負。 所以 1 表示為 2^0 前面的則只能全是0 了。
所以 1 然後補齊 0000000 得到 00000001。

原碼的計算不準確問題

但是直接使用原碼在計算時卻會有麻煩,比如(1)10+(–1)10=0,如果直接使用原碼則:

(00000001)2+(10000001)2=(10000010)2

解釋: 直接相加 然後 逢2 進1 則 10000002 因為有2 所以變為10000010

這裡 ()N 表示是 N進位制

這樣計算的結果是–2,也就是說,使用原碼直接參與計算可能會出現錯誤的結果。所以,原碼

的符號位不能直接參與計算,必須和其它位分開,這樣會增加硬體的開銷和複雜性

反碼

正數的反碼與原碼相同。負數的反碼符號位為1,其餘各位為該數絕對值的原碼按位取反。這個

取反的過程使得這種編碼稱為“反碼”。

例如,–1的反碼:11111110。

同樣對上面的加法,使用反碼的結果是:

(00000001)2+(11111110)2=(11111111)2

這樣的結果是負0,而在人們普遍的觀念中,0是不分正負的。反碼的符號位可以直接參與計

算,而且減法也可以轉換為加法計算

補碼

正數的補碼與原碼相同。負數的補碼是該數的反碼加1,這個加1就是“補”。

例如,–1的補碼:11111110+1=11111111。

再次做加法是這樣的:

(00000001)2+(11111111)2=(00000000)2

直接使用補碼進行計算的結果是正確的。

對一個補碼錶示的數,要計算其原碼,只要對它再次求補,可得該數的原碼。

由於補碼能使符號位與有效值部分一起參加運算,從而簡化運算規則,同時它也使減法運算轉

換為加法運算,進一步簡化計算機中運算器的電路,這使得在大部分計算機系統中,資料都使用補

碼錶示。

移碼

移碼是對補碼的符號位取反得到的一種編碼。移碼只用於表示浮點數的階碼,所以只用於整

數。

例如,-1的移碼為:01111111。

計算機組成與體系結構-資料的表示-碼制

本作品採用《CC 協議》,轉載必須註明作者和本文連結

上海PHP自學中心-免費程式設計視訊教學|
7Dn78VKKcW.jpg!large
S3d25uqwht.png!large

相關文章