原碼-反碼-補碼-移碼的運算及作用


索引
1 源碼->反碼—>補碼->移碼是怎么換算的

2 他們的作用

3 總結


源碼、反碼、補碼、移碼在計算機中是怎么運算的?

數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的范圍為 127~(-127)
另外,我們需要知道,在計算機中都是以補碼的儲存負數的(正數的補碼等於他本身,所以也可以理解為計算機儲存的是補碼),那么我們從源碼->反碼的過程其實是為了計算補碼的一個計算的過程。

運算過程:原碼->反碼->補碼->移碼

原碼 :二進制(開頭第一個表示符號0正1負)

反碼 :在原碼的基礎上,符號位不動,其他位取反 ---注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
補碼 :在反碼的基礎上,運算+1  ---注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。 
公式:兩數補碼的和==兩數和的補碼。

移碼 :在補碼的基礎上,符號位取反
101011(二進制)--> 原碼 00101011 --> 反碼 01010100 --> 補碼 01010101--> 移碼 11010101

知道了計算方式后,我們應該研究一下源碼、反碼、補碼的作用是什么?
1 首先看源碼
問:什么是源碼?
答:數字的二進制形式(二進制的數)
問:為什么要用源碼?

答:我是從2個方面看 1 從目前計算機的構造來看它只認識1/0,所以任何指令、數字、都會翻譯成一個二進制數傳遞給計算機。
2 規范和統一計算機的“交流語言”,統一對外的接口。
總結:源碼是計算機唯一認識的語言結構。

2 反碼和補碼
問:反碼是什么?
答:在源碼的基礎上符號位不動,其他取反
問:為什么要用反碼?
答:這個問題需要配合補碼一起查看,因為補碼=反碼+1 所以一般的計算順序為 源碼-->反碼-->補碼
*問:補碼是什么?
答: 補碼=反碼+1(符號位參與運算)
問:為什么要用補碼?
答:為了進行做加減運算,因為計算機只有加法計算器,所以a-b的處理方式為a+(-b),而這過程中如果直接用源碼進行計算會出現問題

例1 10+(-10)= 0 (當使用源碼進行計算減法)
10(十進制) -- 00001010(源碼)
-10(十進制) -- 10001010 (源碼)
  00001010+
10001010
-----------
1XXXXXXX ----->首先看到第一位是負數,顯然不是我們想要的結果

例子2 10-11 (試試用減法直接做計算吧)
  10(十進制) -- 00001010(源碼)
-11(十進制) -- 10001011(源碼)

00001010-
10001011
------------
xxxxx11111----->可以看到貌似跟答案-1(十進制)差距還是比較明顯的

現在我們嘗試應用補碼進行計算
例子3 10+(-10)=0 (使用補碼)
10(十進制) --- 00001010(源碼)----同源碼(反碼)----同源碼(補碼)
-10(十進制) --- 10001010(源碼)----11110101(反碼)----11110110(補碼)

00001010+ 10的源碼----注意正數用補碼(值等同於源碼)
11110110 -10的補碼----注意負數用補碼
---------
00000000 得到了0的補碼

例子3 10-11 (使用補碼)
 10(十進制) --- 00001010(源碼)----同源碼(反碼)----同源碼(補碼)
-11(十進制) --- 10001011(源碼)----11110100(反碼)----11110101(補碼)

 

00001010+    10的補碼
11110101 -11的補碼
------------
11111111--- 得到了-1的反碼

從這4個例子可以看出反碼和補碼使用的作用了,用於為二進制負數做運算時的一種轉換。

再次總結運算過程
數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的范圍為 127~(-127)

運算過程:原碼->反碼->補碼->移碼

原碼 :二進制(開頭第一個表示符號0正1負)

反碼 :在原碼的基礎上,符號位不動,其他位取反 ---注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
補碼 :在反碼的基礎上,運算+1  ---注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。 
公式:兩數補碼的和==兩數和的補碼。

移碼 :在補碼的基礎上,符號位取反
























免責聲明!

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



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