原碼 反碼 補(bǔ)碼
對(duì)計(jì)算機(jī)中常見(jiàn)數(shù)據(jù)簡(jiǎn)單分類
機(jī)器數(shù)與真值
原碼
反碼
補(bǔ)碼
擴(kuò)展
對(duì)計(jì)算機(jī)常見(jiàn)數(shù)據(jù)的分類
機(jī)器數(shù)
數(shù)值在計(jì)算機(jī)中的二進(jìn)制表現(xiàn)形式
機(jī)器數(shù)在計(jì)算機(jī)中有符號(hào),最高位表示符號(hào),使用0表示正,使用1表示負(fù)
一個(gè)字節(jié)8個(gè)bit位表示,一個(gè)字=兩個(gè)字節(jié)
+5=0000 0101
1000 1010=-10
真值
機(jī)器數(shù)所表示的真正的數(shù)值
如:1000 1010 = -10
原碼
原碼就是符號(hào)位加上真值的絕對(duì)值
- 原碼表示范圍:-127到 -0 ,+0到+127
反碼
正數(shù):正數(shù)的反碼=原碼 如:+3=0000 0011[原碼]=0000 0011[反碼]
負(fù)數(shù):符號(hào)位不變,其余各位直接取反,1->0,0->1
-7 :[原碼]1000 0111
[反碼]1111 1000
-33:1010 0001->1101 1110
- 反碼的表示范圍:-127到-0,+0到+127
補(bǔ)碼
-5 = 1000 0101 原碼
1111 1010 反碼
計(jì)算機(jī)中數(shù)據(jù)以補(bǔ)碼的形式存儲(chǔ),同樣以補(bǔ)碼的形式參與運(yùn)算
正數(shù):原碼=反碼=補(bǔ)碼 如:+3=0000 0011[原碼]=0000 0011[反碼]=0000 0011[補(bǔ)碼]
負(fù)數(shù):首先求得反碼,在反碼的基礎(chǔ)上+1[加到最低位]
補(bǔ)碼的表示范圍-128 到 -1,0 到127
-34:1010 0010->1101 1101->1101 1110
-29:1001 1101->1110 0010->1110 0011
-47:1010 1111->1101 0000->1101 0001
-128:1111 1111->1000 0000->1000 0001
注意:-128沒(méi)有原碼和反碼,規(guī)定-128的補(bǔ)碼為1000 0000
單擊查看:-128的原碼,反碼,補(bǔ)碼
為什么需要反碼和補(bǔ)碼
-
反碼
- 在設(shè)計(jì)計(jì)算機(jī)的時(shí)候只有加法器沒(méi)有減法器,為了將減法轉(zhuǎn)換為加法,設(shè)計(jì)了反碼,但是反碼有缺陷:正負(fù)相加,0的表示不唯一;
-
補(bǔ)碼
- 為了解決反碼正負(fù)相加不唯一的情況,使用高位溢出解決;
將補(bǔ)碼轉(zhuǎn)換為原碼
正數(shù):不需要轉(zhuǎn)
負(fù)數(shù):求補(bǔ)碼的補(bǔ)碼
將負(fù)數(shù)的補(bǔ)碼當(dāng)做原碼然后求該原碼的補(bǔ)碼
計(jì)算規(guī)則:符號(hào)位不變,其余各位直接取反,然后加1;