軟考 再看原碼 反碼 補碼

2021-06-21 23:08:43 字數 1652 閱讀 4899

眾所周知,乙個正數的原碼、補碼、反碼是相同的,負數則不同。先提乙個問題,為什麼在計算機中要使用這些編碼方式呢?

1. 

原碼

將最高位用做符號位(

0表示正數,

1表示負數),其餘各位代表數值本身的絕對值的表示形式。這種方式是最容易理解的。

例如,+1的原碼是

00000001,-1

的原碼是

10000001。

但是直接使用原碼在計算時卻會有麻煩,比如

(1)10

+(-1)

10=0

,如果直接使用原碼則:

(

00000001)2+

(10000001)2=

(1000010)

2

這樣計算的結果是

-2,也就是說,使用原碼直接參與計算可能會出現錯誤的結果。所以,原碼的符號位不能直接參與計算,必須和其他位分開,這樣會增加硬體的開銷和複雜性。

2. 

反碼

正數的反碼與原碼相同。負數的反碼符號位為

1,其餘各位為該數絕對值的原碼按位取反。這個取反的過程使得這種編碼稱為「反碼」。

例如,-1的反碼:

11111110

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

(

00000001)2+

(11111110)2=

(11111111)

2

這樣的結果是負

0,而在人們普遍的觀念中,

0是不分正負的。反碼的符號位可以直接參與計算,而且減法也可以轉換為加法計算。(

[+0]反=

00000000

,[-0]反=

11111111)

3. 

補碼

正數的補碼與原碼相同。負數的補碼是該數的反碼加

1,這個加

1就是「補」。

例如,-1的補碼:

11111111

再次做加法是這樣的:

(

00000001)2+

(11111111)2=

(00000000)

2

直接使用補碼進行計算的結果是正確的(:在補碼表示中,

[+0]補=

00000000

,[-0]補=

000000000

——所以

0有唯一的編碼

00000000

,不分正負

)。注意到我們這裡只是舉例,並非證明。

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

由於補碼能使符號位與有效值部分一起參加運算,從而簡化運算規則,同時它也使減法運算轉換為加法運算,進一步簡化計算機中運算器的電路,這使得在大部分計算機系統中,資料都使用補碼表示。

猶記得兩年前,學會了這幾種編碼的轉換,「只知其然,不知其所以然」,通過這次軟考,讓自己能夠去想這個問題。「學習是一種過程」,越來越能體會到這句話人真諦吧。弱弱地問一句,您現在知道計算機中使用這些編碼的原因了吧?(反正我知道了,嘻嘻^-^)

軟考 原碼 反碼 補碼 移碼

在計算機中,資料編碼方式可以有多種,最為常見的有原碼 反碼 補碼 移碼。在進行原碼,反碼,補碼,移碼之間的轉換的時候首先要將他們轉換為二進位制,在下面的講解中以17為例來進行講解。將17轉換為八位數的二進位制為00010001。在原碼中,將最高位用作符號位 0表示正數,1表示負數 其餘各位代表數值本...

軟考必備2 原碼 反碼 補碼和移碼

1 原碼 反碼 補碼和移碼 原碼例子如下 在原碼表示法中,最高位是符號位,0表示正號,1表示負號,其餘的n 1 位表示數值的絕對值。反碼例子如下 正數的反碼與原碼相同,負數的反碼則是其絕對值按位求反。其餘規則和原碼的一樣。補碼例子如下 正數的補碼與其原碼和反碼相同,負數的補碼則等於其反碼的末尾加1,...

軟考筆記(1) 原碼 反碼 補碼 移碼轉換

各種數值在計算機中表示的形式成為機器數,採用二進位制計數制,數的符號用0 正數 和1 負數 表示,小數點隱含表示 不佔位置 機器數分為無符號數和帶符號數,帶符號數又分為純整數和純小數。純整數 對無符號數,若約定小數點的位置在機器數的最低位之後,則為純整數,如123。純小數 對無符號數,若約定小數點的...