一、什麼是二進位制
在說二進位制之前,我們先回想下平常我們用的最多的十進位制,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的位置化表示:



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

三、反碼
原碼在計算機儲存整數中並不常用,計算機使用二進位制補碼來表示n位儲存單元中的有符號整數。
反碼是由原碼轉換為補碼的中間形式,該運算可以應用到任何整數,無論是正的還是是負的,進行反碼運算時,最左邊符號位保持不變,當此數字為負數時,其絕對值位各位求反;正數反碼為這個數本身
例如n=4位儲存單位中數字3的反碼:


四、補碼
幾乎所有計算機都使用使用二進位制補碼來表示n位儲存單元中的有符號整數。那麼如何獲得一個數補碼,規則很簡單: 正數的補碼為其本身; 負數的補碼為其反碼在加上1得到的結果;
例如在4位的儲存單位中,-5的補碼錶示:

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

所以總結起來,計算機以二進位制補碼儲存正數遵循以下步驟: ①將整數轉換為n位的二進數 ②如果整數是正數或零,以其原樣儲存,如果是負數,計算機取其補碼。 而從二進位制補碼還原為整數,遵循如下步驟: ①如果最左位是1,計算機取其補碼。如果是0,不進行任何操作 ②將該整數轉換為十進位制
四、為什麼使用補碼
計算機採用二進位制補碼錶示的優點在於加法和減法之間沒有區別,當遇到減法運算時,計算機可以簡單的把它轉變為加法,只需要求為第二個數求二進位制的補碼即可。這樣符號位就能參與運算,降低了計算機邏輯電路複雜度。 例如在n=4位儲存單元,計算機計算5-3時,可以按照5+(-3)處理
