有符號數處理
维基百科,自由的百科全书
在日常生活,負數可在最前方加上負號「-」來表示。然而電腦為了計算上的方便,要以其他系統來表示有符號的整數。下面介紹的方法都是基於二進制的。
這些用來表示負整數的方法,最高位元都為符號位(sign bit),正數用一般二進制方法表示,正數的最高位元都是0。
[编辑] 二進制補碼
又叫二的補碼(two's complement),是現時電腦系統內最常用來表示正負整數的方法。
設n為字長。若a為正整數,將a和-a的二進制補碼加起,結果必為0(00...0)。
因此,電腦最大能表示2n − 1 − 1,最小能表示 − 2n − 1。
例如3位二進制補碼:
二進制補碼 十位數 011 3 010 2 001 1 000 0 111 -1 110 -2 101 -3 100 -4
這套系統對電腦的優勢可考慮下面的例子:在4位二進制補碼系統,計算3 (0011)加 -1 (1111)。表面上,答案是10010,但摒除了最左方多出的第5位元後,便得到正確的0010。
[编辑] 二進制反碼
又叫一的補碼(one's complement)。負數是對相應的正數bitwise NOT。因此,它最大可表示2n − 1 − 1,最小只可表示 − 2n − 1 + 1。0可用00...0或11..1。
二進制反碼 十位數 011 3 010 2 001 1 000 +0 111 -0 110 -1 101 -2 100 -3
在二進制反碼進行加法運算,整個數要加1才得出正確的結果。考慮−1 (110) 加 +2 (010),結果是000,整個數再加1,答案是1 (001)。又例如-1 (110)加+3 (011),結果是001,再加1,得2 (010)。
[编辑] 符號數值表示法
英文sign-and-magnitude。負數,除去符號位,其他都和相應的正數一樣。因此,它最大可表示2n − 1 − 1,最小可表示 − 2n − 1 + 1。
符號數值 十位數 011 3 010 2 001 1 000 +0 100 -0 101 -1 110 -2 111 -3