計算機之原碼、反碼、補碼


一、原碼

對於有符號數:原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值。

例如:5

原碼的二進制:0000 0101

例如:-5

原碼的二進制:1000 0101

對於無符號數:原碼就是真值。

例如:5      源碼的二進制:0000 0101

在計算機中,可以區分正負的類型,稱為有符類型,無正負的類型(只有正值),稱為無符類型;所以無符號數無法表示負數

二、反碼

正數的反碼:是其本身

例如:5

原碼:0000 0101

反碼:0000 0101

負數的反碼:在其原碼的基礎上, 符號位不變,其余各個位取反.

例如:-5

原碼:1000 0101

反碼:1111 1010

三、補碼

正數的補碼:是其本身

例如:5

原碼:0000 0101

反碼:0000 0101

補碼:0000 0101

負數的補碼:在其原碼的基礎上, 符號位不變, 其余各位取反, 最后+1. (即在反碼的基礎上+1)

例如:-5

原碼:1000 0101

反碼:1111 1010

補碼:=反碼+1=1111 1010 +1 =1111 1011=251

例如:-1

原碼:1000 0001

反碼:1111 11110

補碼:1111 11111 =255

四、補碼轉源碼

正數:補碼與原碼相等 所以無需轉換

負數補碼轉源碼:在補碼的基礎上, 符號位不變, 其余各位取反, 最后+1. (即在反碼的基礎上+1)

補碼:1111 1101

反碼:1000 0010

原碼:1000 0011=-3

五、計算機采用補碼的意義

計算機通常用補碼來表示有符號數,計算機的一個數據可以看作是有符號數,也可以看作無符號數的,也就是說計算機並不知道你存的是有符號數還是無符號數,而且所做的運算並不需要管你存的是什么數

  • 原因:簡化計算機基本運算電路,使加減法都只需要用加法電路實現,用加法替代減法。例如:2-1 =2+(-1);
  • 目的:為了簡化計算機基本運算電路,使加減法都只需要通過加法電路實現,也就是讓減去一個正數或加上一個負數這樣的運算可以用加上一個正數來代替。於是改變負數存儲的形式,存儲成一種可以直接當成正數來相加的形式,這種形式就是補碼。

1、原碼計算加減法:加法正確 ,但是減法的結果錯誤

2、反碼計算加減法:加法與減法結果都是正確的

3、使用補碼計算加減法:加法與減法結果都是正確的,並且解決了-0 的問題

六、證明計算機中使用的是補碼

 使用java語言證明:由於正數的原碼與補碼相同,所以這里我們使用負數證明  byte b=-3;

 

 

 

 由結果可知JAVA代碼右位移1位的結果與我們使用補碼計算的結果一致

 


免責聲明!

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



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