[計算機概論] 定義負數

第一種定義方式: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

參考資料

Comments

Popular posts from this blog

Alpha Camp 全端開發課程學習心得

在 javascript 用 regular expression 為金額加上千位數分隔符號

shop_platform - sqlalchemy.exc.TimeoutError