理解二進制原碼、反碼、補碼

1、什麼是二進制

  在說二進制以前,咱們先回想下日常咱們用的最多的十進制,1,0,50,-100,899等等這些數字咱們在熟悉不過了,牽扯到咱們的衣食住行方方面面。組成十進制的數字符號集合爲{0,1,2,3,4,5,6,7,8,9}共十個元素。十進制的運算規則爲:  1.「滿十進一,借一當十」  2.按位權展開,第一位權爲10^0, 第二位位權爲10^1 ……以此類推,第N位10^(N-1),這也是就是咱們說的位置化數字系統,在數字中符號所佔據的位置決定了其表示的值  例如,十進制數字698的位置化表示: 3d

698
  這裏咱們看到,位權中的 基數跟進制的 符合集合個數有關,十進制有0~9共十個符號,因此十進制的位權 基數爲10,基數的冪從0開始到n-1。   有了 十進制的鋪墊,那麼 二進制理解起來就不會那麼難了。 二進制是計算機存儲程序和數據的標準形式,二進制的符號集爲{0,1},因此二進制只能以0、1的組合去表示數字,類比十進制規則,它的規則則是:   1.滿二進一,借一當二   2.按位權展開,基數爲2,第一位權爲2^0, 第二位置位權爲2^1 ……以此類推,第N位2^(N-1),一樣遵循 位置化數字系統規則  例如,數字6的二進制表示爲110:
6
   十進制如何轉換 二進制呢?   十進制轉換爲二進制很簡單,使用十進制數除以2取餘數,直到商爲0,所得的餘數倒序排列。   例如咱們將十進制的數字8轉換爲二進制表示的運算過程:
8

2、原碼

   存儲到計算機之中的數據都被轉換爲了二進制形式,可是還有問題須要解決:如何存儲數字的符號?    若是不考慮數字的符號,對於n位存儲單元,所能存儲的範圍爲[0~2^n-1],例如n=4時,它能表示的範圍就是0 ~ 15。    但咱們都知道,數字有正數、負數之分,所以原碼表示法規定了,在n位的存儲單元中,使用最左1個二進制位表示符號0表示正1表示負其他位置表示數字的絕對值。    例如n=4的存儲單元,所能存儲的無符號數範圍爲[0~2^n-1],最左位當作符號位置後,能夠僅用剩餘3位表示數字的絕對值。 cdn

原碼錶示
   從上圖咱們能夠看到n=4位的存儲單元,使用原碼錶示法時,被分爲了兩個相等的子範圍便是正整數0000 ~ 0111和負整數1000 ~ 1111。    因此總結起來 原碼表示法,n位的存儲單元可存儲數字範圍爲-(2^n-1 - 1)至 +(2^n-1 - 1),而且原碼錶示法中有 兩個0+0-0

3、反碼

   原碼在計算機存儲整數中並不經常使用,計算機使用二進制補碼來表示n位存儲單元中的有符號整數反碼是由原碼轉換爲補碼的中間形式,該運算能夠應用到任何整數,不管是正的仍是是負的,進行反碼運算時,最左邊符號位保持不變,當此數字爲負數時,其絕對值位各位求反;正數反碼爲這個數自己    例如n=4位存儲單位中數字3的反碼:
blog

3的反碼
   -3的反碼:
-3

4、補碼

   幾乎全部計算機都使用使用二進制補碼來表示n位存儲單元中的有符號整數。那麼如何得到一個數補碼,規則很簡單:    正數的補碼爲其自己;    負數的補碼爲其反碼在加上1獲得的結果圖片

 例如在4位的存儲單位中,-5的補碼錶示: it

在這裏插入圖片描述

例如在n=4位的存儲單元中,還原1 0 1 1所表示的整數: io

在這裏插入圖片描述

 因此總結起來,計算機以二進制補碼存儲正數遵循如下步驟:   ①將整數轉換爲n位的二進數   ②若是整數是正數或零,以其原樣存儲,若是是負數,計算機取其補碼。  而從二進制補碼還原爲整數,遵循以下步驟:    ①若是最左位是1,計算機取其補碼。若是是0,不進行任何操做    ②將該整數轉換爲十進制class

4、爲何使用補碼

   計算機採用二進制補碼錶示的優勢在於加法和減法之間沒有區別,當遇到減法運算時,計算機能夠簡單的把它轉變爲加法,只須要求爲第二個數求二進制的補碼便可這樣符號位就能參與運算,下降了計算機邏輯電路複雜度。   例如在n=4位存儲單元,計算機計算5-3時,能夠按照5+(-3)處理 二進制

補碼計算
獲得結果0010按照補碼->十進制整數轉換規則,結果是2   補充:二進制補碼加法與十進制加法同樣,列與列相加,滿二進一,若是有進位,就加到下一列,可是最後一列進位要捨棄(圖中的紅色標識的1)。
相關文章
相關標籤/搜索