索引
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 ---注意,任何正數的源碼=反碼=補碼,而負數都是通過補碼表示的。
公式:兩數補碼的和==兩數和的補碼。
移碼 :在補碼的基礎上,符號位取反