有符號(hào)數(shù)表示方法:原碼、反碼、補(bǔ)碼
表示方法組成:符號(hào)位、數(shù)值位
正數(shù):三者相同(0001)
負(fù)數(shù):
- 原碼:符號(hào)位為1 (1001)
- 反碼:除符號(hào)位,取反(1110)
- 補(bǔ)碼:反碼加1(1111)
原碼雖然可以表示正負(fù),但是符號(hào)位無(wú)法參與運(yùn)算(計(jì)算時(shí)要先辨別符號(hào)位,再做數(shù)值位的加減運(yùn)算);為了避免計(jì)算機(jī)再編碼一套二進(jìn)制減法的運(yùn)算規(guī)則,可以通過(guò)補(bǔ)碼將減法轉(zhuǎn)化為加法運(yùn)算。減去一個(gè)數(shù)等于加上這個(gè)數(shù)的相反數(shù)(十進(jìn)制:負(fù)數(shù),二進(jìn)制:補(bǔ)碼)。
1 - 1 -> 1 + -1(負(fù)數(shù))
0001 - 1001(原碼) -> 0001 + 1111(補(bǔ)碼)
在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)表示和存儲(chǔ)。原因在于,使用補(bǔ)碼,可以將符號(hào)位和數(shù)值域統(tǒng)一處理;同時(shí),加法和減法也可以統(tǒng)一處理。
實(shí)現(xiàn)原理:計(jì)算機(jī)二進(jìn)制運(yùn)算有位數(shù)上限(數(shù)值部分),溢出部分直接丟棄(參與符號(hào)運(yùn)算)。
反觀十進(jìn)制減法,雖然有等于加上減數(shù)的負(fù)數(shù)這一概念,但是我們?cè)谟?jì)算過(guò)程中,本質(zhì)上并沒(méi)有做什么加法運(yùn)算,不過(guò)是靠著小學(xué)時(shí)背的減法口訣表做了一次減法運(yùn)算。整個(gè)過(guò)程相當(dāng)于先判斷加減,再做運(yùn)算。當(dāng)然計(jì)算機(jī)也可以這么做,不過(guò)考慮到效率問(wèn)題,統(tǒng)一按加法處理了(正好利用了溢出這個(gè)缺陷)。
你可以理解為計(jì)算機(jī)只會(huì)加法運(yùn)算(移位),除法轉(zhuǎn)成減法,減法轉(zhuǎn)成加法,乘法轉(zhuǎn)成加法。