學習筆記 關於原碼與補碼

2021-09-11 18:09:12 字數 1885 閱讀 9402

二進位制原碼:

最高位為符號位,最高位為0時表示正數,為1時表示負數,如:

1111 1111 = -127 ; 0111 1111 = 127

此時稱為原碼(true form),但原碼不能直接參與運算,如:

1000 0001 = -1

0000 0001 = 1

-1 + 1 = 1000 0001 + 0000 0001 = 1000 0010 = -2 12

3這顯然是錯誤的,此外可以發現原碼中有兩種0: 

0000 0000 = +0 ; 1000 0000 = -0

因此計算機中採用補碼(complement)來表示有符號整數。

首先引出模的概念:

模為乙個計量系統的計數範圍。如時鐘的表示範圍為00:00:00 – 11:59:59,故時鐘的模為12:00:00。有模的計量器均可以化減法為加法,如若想從10點調整到6點,既可以倒撥4個小時,也可以正撥8個小時。

byte型資料有8位,則不考慮符號時,其能表示的最大數值為1111 1111(255),+1後為1 0000 0000,最高位溢位,歸零。故byte型資料的模則為256(2828)

補碼的定義:

對於正整數來說,原碼即補碼;

對於負整數來說,其補碼與其絕對值的原碼相加,和為模(2n2n);

補碼中0的表示方法只有一種:0000 0000;

強制規定原碼的-0(僅最高位為1,其他位全為0)的值為最小的負數,即−2(n−1)−2(n−1)。如byte型資料中,1000 0000 = -128(−27−27);

補碼再求補碼,等於該整數本身;

補碼的計算:

對於正整數,原碼即補碼;

對於負整數,補碼的求法為取其絕對值的二進位制,按位取反後+1,即求得其補碼。如以byte型資料為例,求-7的補碼: 

先取得7的二進位制:0000 0111 = 7

按位取反: 1111 1000

再加1:1111 1001 即為-7的補碼

對負數求補碼的演算法的代數證明:

由補碼定義可知,乙個負整數的補碼與其絕對值的原碼(由於是正數,即為補碼),和為模。對於乙個n位的二進位制數來說,模為2n2n。

設乙個負數a−a−,其二進位制原碼為 1 kn−2 kn−3 … k1 k01 kn−2 kn−3 … k1 k0,則其絕對值a+a+的二進位制原碼/補碼為 0 kn−2 kn−3 … k1 k00 kn−2 kn−3 … k1 k0。其十進位制的值即為: 

a+=0∗2n−1+kn−2∗2n−2+kn−3∗2n−3+ ... +k1∗21+k0∗20

a+=0∗2n−1+kn−2∗2n−2+kn−3∗2n−3+ ... +k1∗21+k0∗20

按照負整數補碼求法,要將其絕對值的原碼/補碼先按位取反再+1(ac=∼a++1ac=∼a++1)。對於二進位制來說,每一位非0即1,即使當前位為未知的x,按位取反也可用(1-x)表示。則a+a+按位取反後二進位制為1 (1−kn−2) (1−kn−3) … (1−k1) (1−k0)1 (1−kn−2) (1−kn−3) … (1−k1) (1−k0),十進位制表示方法為:

∼a+=1∗2n−1+(1−kn−2)∗2n−2+(1−kn−3)∗2n−3+ ... +(1−k1)∗21+(1−k0)∗20=(2n−1+2n−2+ ... +20) − (2n−2∗kn−2+2n−3∗kn−3+ ... +21∗k1+20∗k0)=2n−1−a+⇒(∼a++1)+a+=2n⇒ac+a+=2n

∼a+=1∗2n−1+(1−kn−2)∗2n−2+(1−kn−3)∗2n−3+ ... +(1−k1)∗21+(1−k0)∗20=(2n−1+2n−2+ ... +20) − (2n−2∗kn−2+2n−3∗kn−3+ ... +21∗k1+20∗k0)=2n−1−a+⇒(∼a++1)+a+=2n⇒ac+a+=2n

即該負整數的補碼與其絕對值的原碼/補碼相加等於模,完全符合補碼的定義。證畢!

關於原碼,補碼的筆記

一,原碼 原碼表示法規定 用符號位和數值表示帶符號數,正數的符號位用 0 表示,負數的符號位用 1 表示,數值部分用二進位制形式表示。如 在八位編碼下,原碼 取值從 2 7 1 2 7 1 x 原 0111 1111 x 2 7 1 x 原 0000 0000 x 0 x 原 1000 0000 x...

原碼與補碼

為了方便,本文假設系統為4位系統。原碼即我們熟知的十進位制轉二進位制,不過最高位為符號位,1代表負數。如2的原始碼是0010,2的原碼是1010,負數的原碼不能直接計算,比如2 2應該為0,但按照原始碼的二進位制計算為1100 4 因此計算時需要一種新的表示方法,那就是補碼。4位的二進位制,最大的數...

原碼 反碼與補碼

在計算機內,定點數有3種表示法 原碼 反碼和 補碼。所謂原碼就是 二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘位表示數值的大小。反碼表示法規定 正數的反碼與其原碼相同 負數的反碼是對其原碼逐位取反,但符號位除外。補碼表示法規定 正數的補碼與其原碼相同 負數的補碼是在其反碼的末位...