原碼、反碼、補(bǔ)碼
計(jì)算機(jī)通常用補(bǔ)碼表示整數(shù)
公式:負(fù)數(shù)(x)
(x)原碼+(x)補(bǔ)碼=0,進(jìn)位丟棄.
為了簡單起見,我們用1個(gè)字節(jié)來表示一個(gè)整數(shù)。
原碼
將最高位作為符號(hào)位(以0代表正,1代表負(fù)),其余各位代表數(shù)值本身的絕對(duì)值(以二進(jìn)制表示)。
+7的原碼為: 00000111
-7的原碼為: 10000111
問題:
+0的原碼為:00000000
-0的原碼為: 10000000
反碼:
一個(gè)數(shù)如果為正,則它的反碼與原碼相同;一個(gè)數(shù)如果為負(fù),則符號(hào)位為1,其余各位是對(duì)原碼取反。
+7的反碼為:00000111
-7的反碼為: 11111000
問題:
+0的反碼為:00000000
-0的反碼為:11111111
補(bǔ)碼:
一個(gè)數(shù)如果為正,則它的原碼、反碼、補(bǔ)碼相同;
一個(gè)數(shù)如果為負(fù),則符號(hào)位為1,其余各位是對(duì)原碼取反,然后整個(gè)數(shù)加1。
+7的補(bǔ)碼為:00000111
-7的補(bǔ)碼為:
第一步:由-7原碼得到-7的反碼,得到11111000,第二步,反碼+1=11111001
即負(fù)數(shù)補(bǔ)碼公式:
補(bǔ)碼=反碼+1
問題:0的補(bǔ)碼表示:
+0的補(bǔ)碼: 00000000
-0的補(bǔ)碼:
第一步:得到-0(10000000)的反碼:11111111
第二步:反碼(11111111)+1 = 1 00000000
第三步:進(jìn)位1被丟棄
對(duì)于有模運(yùn)算來講,減一個(gè)數(shù)等于加上該數(shù)對(duì)模的補(bǔ)數(shù)。補(bǔ)碼就是按補(bǔ)數(shù)概念對(duì)數(shù)據(jù)進(jìn)行編碼的。計(jì)算機(jī)引入補(bǔ)碼后,減法可轉(zhuǎn)換為加法,方便運(yùn)算