標籤:負數 二進位 使用 計數 例子 計算 mod 等價 nbsp
我對補碼的最初的印象是大一的時候老師說按位取反再加一,卻不知道為什麼這樣做,最近看了一下資料,總結一下我的理解吧。
一、計數系統
一個計數系統可以存多少容量狀態的數,我叫它作為計數系統的Mod。一個計數系統不斷地加一,那麼它表示的數的狀態也會周期性地變化,我叫這個周期的大小叫做Mod。
舉個兩個例子,1、一個包含兩個bit的儲存單位,它可以表示00,加一變成01,加一變成10,加一變成11,再加一又變成了00。即該計數系統的Mod為4。2、一個時鐘顯示十二個小時,時針旋轉一周后回到原來的狀態,即該系統的Mod為12。
由此,可以得到一個結論。這種周期性變化的計數系統,一個狀態加減整數倍的Mod,其狀態不會有不會發生變化。00加上4次之後還是00,12點時陣轉兩圈後還是12點。
二、變減為加
在電腦中使用加法器對資料進行計算,那麼如何進行減法的運算呢?
設Mod=16
若a=3,b=-4,則a+b=a+b+Mod=-1+Mod=a+(Mod-4)=15(在計數系統中-1和15等價)
實際上Mod-4就是b的補數,所有的減法在電腦中都可以轉化為加上減數的補數,對應電腦上的概念就是補碼。
因此,電腦是使用補碼(補數)進行計算。
三、約定的加號或減號
設現有一個4位的計數系統,那麼我們可以知道該系統的Mod=16,即該系統一共可以表示16個狀態。我也約定這個四位系統的0000狀態為0,向前連續加十六得到0000本身,對應表示的數字如下:
1111 = 15 0000 = 0
1110 = 14 0001 = 1
1101 = 13 0010 = 2
1100 = 12 0011 = 3
1011 = 11 0100 = 4
1010 = 10 0101 = 5
1001 = 9 0110 = 6
1000 = 8 0111 = 7
如果這個計數系統是無符號位的,顯然可以知道它表示的資料範圍為:0~15
如果這個計數系統是有符號位的呢?
首先要對這些資料進行分配,現在的教科書上的做法就是把Mod前一半劃分給0~7,後一半Mod劃分給-8~-1,即如(這裡二進位都是補碼):
1111 = -1 0000 = 0
1110 = -2 0001 = 1
1101 = -3 0010 = 2
1100 = -4 0011 = 3
1011 = -5 0100 = 4
1010 = -6 0101 = 5
1001 = -7 0110 = 6
1000 = -8 0111 = 7
現在約定最高位為符號位,則顯然正數的補碼就是它本身,負數的補碼和原碼對照圖如下:
1111 = -1 1001 -> 1110 +1 -> 1111
1110 = -2 1010 -> 1101 +1 -> 1110
1101 = -3 1011 -> 1100 +1 -> 1101
1100 = -4 1100 -> 1011 +1 -> 1100
1011 = -5 1101 -> 1010 +1 -> 1011
1010 = -6 1110 -> 1001 +1 -> 1010
1001 = -7 1111 -> 1000 +1 -> 1001
1000 = -8 1000 -> 1111 +1 -> 1000
這不正是按位取反再加一麼。
我對補碼的理解