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

1、原碼

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

例如:5blog

原碼的二進制:0000 0101源碼

例如:-5基礎

原碼的二進制:1000 0101二進制

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

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

在計算機中,能夠區分正負的類型,稱爲有符類型,無正負的類型(只有正值),稱爲無符類型;因此無符號數沒法表示負數數據

2、反碼

正數的反碼:是其自己db

例如:5img

原碼:0000 0101

反碼:0000 0101

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

例如:-5

原碼:1000 0101

反碼:1111 1010

3、補碼

正數的補碼:是其自己

例如: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

4、補碼轉源碼

正數:補碼與原碼相等 因此無需轉換

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

補碼:1111 1101

反碼:1000 0010

原碼:1000 0011=-3

5、計算機採用補碼的意義

計算機一般用補碼來表示有符號數,計算機的一個數據能夠看做是有符號數,也能夠看做無符號數的,也就是說計算機並不知道你存的是有符號數仍是無符號數,並且所作的運算並不須要管你存的是什麼數

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

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

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

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

6、證實計算機中使用的是補碼

 使用java語言證實:因爲正數的原碼與補碼相同,因此這裏咱們使用負數證實  byte b=-3;

 

 

 

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

相關文章
相關標籤/搜索