一文搞懂原碼、反碼、補(bǔ)碼

計(jì)算機(jī)底層均是以二進(jìn)制表示的,數(shù)字也不例外,本文旨在探討一下數(shù)字的原碼、反碼和補(bǔ)碼。

概念

需要聲明的是,本文涉及到的數(shù)字及運(yùn)算均基于8位bit下的值。

原碼

最高位為符號(hào)位,0代表正數(shù),1代表負(fù)數(shù),非符號(hào)位為該數(shù)字絕對(duì)值的二進(jìn)制表示。

如:

127的原碼為0111 1111
-127的原碼為1111 1111

反碼

正數(shù)的反碼與原碼一致;

負(fù)數(shù)的反碼是對(duì)原碼按位取反,只是最高位(符號(hào)位)不變

如:

127的反碼為0111 1111
-127的反碼為1000 0000

補(bǔ)碼

正數(shù)的補(bǔ)碼與原碼一致;

負(fù)數(shù)的補(bǔ)碼是該數(shù)的反碼加1。

如:

127的補(bǔ)碼為0111 1111
-127的補(bǔ)碼為1000 0001

總結(jié)一下就是:

  1. 正數(shù)的原碼、反碼、補(bǔ)碼是一致的;

  2. 負(fù)數(shù)的補(bǔ)碼是反碼加1,反碼是對(duì)原碼按位取反,只是最高位(符號(hào)位)不變;

  3. 計(jì)算機(jī)數(shù)字運(yùn)算均是基于補(bǔ)碼的。

下面就來(lái)探討一下,為啥要用補(bǔ)碼來(lái)表示數(shù)字。

補(bǔ)碼有啥好?

如果計(jì)算機(jī)內(nèi)部采用原碼來(lái)表示數(shù),那么在進(jìn)行加法和減法運(yùn)算的時(shí)候,需要轉(zhuǎn)化為兩個(gè)絕對(duì)值的加法和減法運(yùn)算;

計(jì)算機(jī)既要實(shí)現(xiàn)加法器,又要實(shí)現(xiàn)減法器,代價(jià)有點(diǎn)大,那么可不可以只用一種類(lèi)型的運(yùn)算器來(lái)實(shí)現(xiàn)加和減的遠(yuǎn)算呢?

很容易想到的就是化減為加,舉一個(gè)生活中的例子來(lái)說(shuō)明這個(gè)問(wèn)題:

時(shí)鐘一圈是360度,當(dāng)然也存在365度,但其實(shí)它和5度是一樣的;

相同的道理,-30度表示逆時(shí)針旋轉(zhuǎn)30度,其與順時(shí)針旋轉(zhuǎn)330度是一樣的;

這里數(shù)字360表示時(shí)鐘的一圈,在計(jì)算機(jī)里類(lèi)似的概念叫,它可以實(shí)現(xiàn)化減為加,本質(zhì)上是將溢出的部分舍去而不改變結(jié)果。

易得,單字節(jié)(8位)運(yùn)算的模為256=2^8。

在沒(méi)有符號(hào)位的情況下,127+2=129,即:

這時(shí),我們將最高位作為符號(hào)位,計(jì)算機(jī)數(shù)字均以補(bǔ)碼來(lái)表示,則1000 0001的原碼為減1后按位取反得1111 1111,也就是-127。

也就是說(shuō),計(jì)算機(jī)里的129即表示-127,相當(dāng)于模256為一圈,順時(shí)針的129則和逆時(shí)針127即-127是一樣的。

故可以得到以下結(jié)論:

負(fù)數(shù)的補(bǔ)碼為模減去該數(shù)的絕對(duì)值

如-5的補(bǔ)碼為:

-5=256-5=251=1111 1011(二進(jìn)制)

同樣的,臨界值-128也可以表示出來(lái):

-128=256-128=128=1000 0000(二進(jìn)制)

但是正128就會(huì)溢出了,故單字節(jié)(8位)表示的數(shù)字范圍為-128--127。

最后,我們來(lái)看一下,補(bǔ)碼是如何通過(guò)模的溢出舍棄操作來(lái)完成化減為加的!

16-5=16+(-5)=11

1 0000 1011將溢出位舍去,得0000 1011(二進(jìn)制)=11。

好的,本文分享就到這里,希望能夠幫助到大家。

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

相關(guān)閱讀更多精彩內(nèi)容

  • http://www.itdecent.cn/p/55a8195291db本篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)...
    PupilCHen閱讀 1,282評(píng)論 1 48
  • 本篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)碼. 并且進(jìn)行了深入探求了為何要使用反碼和補(bǔ)碼, 以及更進(jìn)一步的論證了為何可...
    yang2yang閱讀 2,477評(píng)論 1 13
  • 本篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)碼. 并且進(jìn)行了深入探求了為何要使用反碼和補(bǔ)碼, 以及更進(jìn)一步的論證了為何可...
    克里斯加德納閱讀 810評(píng)論 0 51
  • 書(shū)中關(guān)于原碼、反碼、補(bǔ)碼和移碼的定義如下(n是機(jī)器字長(zhǎng)):原碼: 反碼: 補(bǔ)碼: 移碼: 原碼, 反碼, 補(bǔ)碼的基...
    困卡閱讀 16,315評(píng)論 2 8
  • 全局上下文 無(wú)論是否在嚴(yán)格模式下,在全局執(zhí)行上下文中(在任何函數(shù)體外部)this 都指代全局對(duì)象。 函數(shù)上下文 在...
    pengANDpeng閱讀 406評(píng)論 0 0

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