在說二進制以前,咱們先回想下日常咱們用的最多的十進制,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
存儲到計算機之中的數據都被轉換爲了二進制形式,可是還有問題須要解決:如何存儲數字的符號? 若是不考慮數字的符號,對於n位存儲單元,所能存儲的範圍爲[0~2^n-1],例如n=4時,它能表示的範圍就是0 ~ 15。 但咱們都知道,數字有正數、負數之分,所以原碼表示法規定了,在n位的存儲單元中,使用最左1個二進制位表示符號,0表示正,1表示負,其他位置表示數字的絕對值。 例如n=4的存儲單元,所能存儲的無符號數範圍爲[0~2^n-1],最左位當作符號位置後,能夠僅用剩餘3位表示數字的絕對值。 cdn
原碼在計算機存儲整數中並不經常使用,計算機使用二進制補碼來表示n位存儲單元中的有符號整數。 反碼是由原碼轉換爲補碼的中間形式,該運算能夠應用到任何整數,不管是正的仍是是負的,進行反碼運算時,最左邊符號位保持不變,當此數字爲負數時,其絕對值位各位求反;正數反碼爲這個數自己 例如n=4位存儲單位中數字3的反碼:
blog
幾乎全部計算機都使用使用二進制補碼來表示n位存儲單元中的有符號整數。那麼如何得到一個數補碼,規則很簡單: 正數的補碼爲其自己; 負數的補碼爲其反碼在加上1獲得的結果;圖片
例如在4位的存儲單位中,-5的補碼錶示: it
例如在n=4位的存儲單元中,還原1 0 1 1所表示的整數: io
因此總結起來,計算機以二進制補碼存儲正數遵循如下步驟: ①將整數轉換爲n位的二進數 ②若是整數是正數或零,以其原樣存儲,若是是負數,計算機取其補碼。 而從二進制補碼還原爲整數,遵循以下步驟: ①若是最左位是1,計算機取其補碼。若是是0,不進行任何操做 ②將該整數轉換爲十進制class
計算機採用二進制補碼錶示的優勢在於加法和減法之間沒有區別,當遇到減法運算時,計算機能夠簡單的把它轉變爲加法,只須要求爲第二個數求二進制的補碼便可。這樣符號位就能參與運算,下降了計算機邏輯電路複雜度。 例如在n=4位存儲單元,計算機計算5-3時,能夠按照5+(-3)處理 二進制