原碼、反碼、補(bǔ)碼

原碼:

原碼就是早期用來表示數(shù)字的一種方式: 一個(gè)正數(shù),轉(zhuǎn)換為二進(jìn)制位就是這個(gè)正數(shù)的原碼。負(fù)數(shù)的絕對值轉(zhuǎn)換成二進(jìn)制位然后在高位補(bǔ)1就是這個(gè)負(fù)數(shù)的原碼。

舉例:

int類型的 3 的原碼是 11B(B表示二進(jìn)制位), 在32位機(jī)器上占四個(gè)字節(jié),那么高位補(bǔ)零就得:

00000000 00000000 00000000 00000011

int類型的 -3 的絕對值的二進(jìn)制位就是上面的 11B 展開后高位補(bǔ)零就得:

10000000 00000000 00000000 00000011

但是原碼有幾個(gè)缺點(diǎn),零分兩種 +0 和 -0 。很奇怪是吧!還有,在進(jìn)行不同符號(hào)的加法運(yùn)算或者同符號(hào)的減法運(yùn)算的時(shí)候,不能直接判斷出結(jié)果的正負(fù)。你需要將兩個(gè)值的絕對值進(jìn)行比較,然后進(jìn)行加減操作 ,最后符號(hào)位由絕對值大的決定。于是反碼就產(chǎn)生了。

反碼:

正數(shù)的反碼就是原碼,負(fù)數(shù)的反碼等于原碼除符號(hào)位以外所有的位取反
舉例:

int類型的 3 的反碼是

00000000 00000000 00000000 00000011

和原碼一樣沒什么可說的

int類型的 -3 的反碼是

11111111 11111111 11111111 11111100

除開符號(hào)位,所有位,取反

解決了加減運(yùn)算的問題,但還是有正負(fù)零之分,然后就到補(bǔ)碼了

補(bǔ)碼:

正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼為 其原碼除符號(hào)位外所有位取反(得到反碼了),然后最低位加1.

舉例:

int類型的 3 的補(bǔ)碼是:

00000000 00000000 00000000 00000011

int類型的 -3 的補(bǔ)碼是

11111111 11111111 1111111 11111101

就是其反碼加1

最后總結(jié):

正數(shù)的反碼和補(bǔ)碼都與原碼相同。

負(fù)數(shù)的反碼為對該數(shù)的原碼除符號(hào)位外各位取反。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容