[計算機概論] 定義負數
第一種定義方式:Two’s Complement Notation
補數:所謂補數(Complement)是指兩個數字加起來等於某數時,則稱該二數互為某數的補數;例如3的10補數為7,同理7的10補數為3(來源:數字系統及數字系統的轉換)
以長度為三個位元為例:定義方式如下
bits | 代表的十進位正負數 | 代表的十進位正整數(這一欄只是輔助對照用的,重點不在這一欄) |
---|---|---|
011 | 3 | 3 |
010 | 2 | 2 |
001 | 1 | 1 |
000 | 0 | 0 |
111 | -1 | 7 |
110 | -2 | 6 |
101 | -3 | 5 |
100 | -4 | 4 |
轉換方式
以十進位的 -3 轉為 bits 為例:3 寫成二進位是 011,從右邊往左邊,在遇到第一個 1 之前(含第一個 1)都照抄,第一個 1 之後的都反著抄,所以得到 101。
以十進位的 -2 轉為 bits 為例:2 寫成二進位是 010,從右邊往左邊,在遇到第一個 1 之前(含第一個 1)都照抄,第一個 1 之後的都反著抄,所以得到 110。
另一種轉換方式:長度限制為 3 位元, 23 = 8(十進位)。-3 轉為 bits:8 - 3 = 5,十進位的 5 轉成二進位 101,剛好就是 -3 的 bits
優點
不用另外製作減法電路,用原本的二進位加法電路就夠用了
例如 3 - 1 即為 3 + (-1),相當於 011 + 111 = 1010,因為長度只有三位元,所以最開頭的 1 記不住,只剩下後三位 010,010 轉成十進位是 2。所以 3 - 1 = 2
要判斷正負數,只要看最左邊的 bit 是 0 或是 1 就可以知道了。1 開頭的是負數
缺點
排序的電路要重寫。原本 100(轉成十進位正整數的話是 4) > 000(轉成十進位正整數的話是 0),但是現在 100 被定義成 -4,所以要變成 100 < 000
第二種定義方式:Excess
以長度為三個位元為例:定義方式如下
bits | 代表的十進位正負數 | 代表的十進位正整數(這一欄只是輔助對照用的,重點不在這一欄) |
---|---|---|
000 | -4 | 0 |
001 | -3 | 1 |
010 | -2 | 2 |
011 | -1 | 3 |
100 | 0 | 4 |
101 | 1 | 5 |
110 | 2 | 6 |
111 | 3 | 7 |
轉換方式
先取得一個特殊的數字備用:「代表的十進位正負數」那一欄的 0,對應到「代表的十進位正整數」那一欄的 4。(4 的計算方式:長度限制是 n 個 bit,那麼就取 2n-1)
以十進位的 2 轉換成 bits 為例:2 + 4 = 6,6 轉成二進位是 110
以十進位的 -2 轉換成 bits 為例:-2 + 4 = 2,2 轉成二進位是 010
優點
要判斷正負數,只要看最左邊的 bit 是 0 或是 1 就可以知道了。0 開頭的是負數
排序的電路不需重寫
缺點
加法需要微調。先求出需要微調的數值 4。(4 的計算方式:長度限制是 n 個 bit,那麼就取 2n-1),4 轉成二進位是 100
例如 3 - 1 即為 3 + (-1),根據定義,相當於 111 + 011 = 1010,因為長度只有三位元,所以最開頭的 1 記不住,只剩下後三位 010,然後加上微調的數值 100,得到 110,因為 110 被定義成 2,所以 3 - 1 = 2
參考資料
台大開放式課程 于天立教授的計算機概論單元 2
Comments
Post a Comment