一補數與二補數
計算機概論中的數字系統,由於電腦都是記錄 1 和 0 兩個數字,所以會講到進位系統的轉換。而進行複雜的運算時,都是靠補數來運算,所以也會提到一補數和二補數。
在邏輯電路中,有個東西叫加法器,但沒有所謂的乘法器和減法器,因為減乘除其實都是靠加法實現的:減法就加上補數、乘法就連加、除法就連加補數。
一補數
減法會用到所謂的一補數。先講作法:
範例:計算 -4 的一補數。
首先先將 4 以二進位表示:$0100$。
然後將每個 1 寫成 0、每個 0 寫成 1(其實就是 NOT 運算),就會得到 $1011$。
這就是一補數的作法。
所以計算 $4-3$ 時,其實就是用 4 加上 3 的補數,也就是 $0100 + 1100$ 得到 $0001$(因為只有四個位元,所以 $10000$ 溢位變成 $0001$),換成十進位的 1。
以下列出 $\pm7$ 的表示法:
原本的數 | 正數 | 負數 |
---|---|---|
0 | 0000 | 1111 |
1 | 0001 | 1110 |
2 | 0010 | 1101 |
3 | 0011 | 1100 |
4 | 0100 | 1011 |
5 | 0101 | 1010 |
6 | 0110 | 1001 |
7 | 0111 | 1000 |
然而,一補數系統中,0 居然可以被表示成正零($+0$)和負零($-0$),這造成了一些問題。
二補數
所以有了二補數系統。一樣先講作法:
範例:計算 -3 的二補數。
首先先將 3 以二進位表示:$0011$。
然後先把每個 1 寫成 0、每個 0 寫成 1,得到 $1100$。(其實就是先算一次一補數)
之後再加上一個 1,得到 $1101$。
這就是二補數的作法。
二補數常用來表示有號數,第一個位元用來記錄正負號(正號表示成 0、負號表示成 1)。以下列出 $\pm3$ 的表示法
原本的數 | 二補數表示法 |
---|---|
3 | 0011 |
2 | 0010 |
1 | 0001 |
0 | 0000 |
-1 | 1111 |
-2 | 1110 |
-3 | 1101 |