關於原碼、反碼和補碼的介紹及轉化關系


計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,是計算機中對數字的二進制定點表示方法。符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同。下面依次介紹並給出相互的轉換關系:

原碼:

簡單直觀;例如,我們用8位二進制表示一個數,+11的原碼為00001011,-11的原碼就是10001011。但參加運算可能出錯。例如數學上,1+(-1)=0,而在二進制中,00000001+10000001=10000010,換算成十進制為-2,顯然出錯了。

反碼:

反碼通常是用來由原碼求補碼或者由補碼求原碼的過渡碼。反碼跟原碼是正數時,一樣;負數時,反碼就是原碼符號位除外,其他位按位取反。

補碼:

在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路。

1、一個負整數(或原碼)與其補數(或補碼)相加,和為模。
2、對一個整數的補碼再求補碼,等於該整數自身。
3、補碼的正零與負零表示方法相同。
總之,正整數的補碼是其二進制表示,與原碼相同。求負整數的補碼,將其原碼除符號位外的所有位取反(0變1,1變0,符號位為1不變)后加1。
 
即正整數的原碼反碼補碼一樣;負整數的反碼是除了原碼符號位其他位全部取反,補碼是反碼加一。

轉換:

由於正數的原碼、補碼、反碼表示方法均相同,不需轉換,所以僅以負數情況分析。
(1) 已知原碼,求補碼。
例:已知某數X的原碼為10110100,試求X的補碼和反碼。
解:由[X]原=10110100知,X為負數。求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
1 0 1 1 0 1 0 0 原碼
1 1 0 0 1 0 1 1 反碼(符號位不變,數值位取反)
1 1 0 0 1 1 00 補碼 (補碼再加一)
故:X的補碼=11001100,X的反碼=11001101。
(2) 已知補碼,求原碼。
分析:按照求負數補碼的逆過程,數值部分應是最低位減1,然后取反。但是對二進制數來說,先減1后取反和先取反后加1得到的結果是一樣的,故仍可采用取反加1 有方法。
例:已知某數X的補碼11101110,試求其原碼。
解:由X的補碼=11101110知,X為負數。
采用逆推法
1 1 1 0 1 1 1 0 補碼
1 1 1 0 1 1 0 1 反碼(末位減1)
1 0 0 1 0 0 1 0 原碼(符號位不變,數值位取反)
即為所求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM