C++入門(mén)教程(17):二進(jìn)制和正負(fù)數(shù)

小古銀的官方網(wǎng)站(完整教程):http://www.xiaoguyin.com/
C++入門(mén)教程視頻:https://www.bilibili.com/video/av20868986/


前面已經(jīng)講過(guò)二進(jìn)制和整數(shù)的關(guān)系,現(xiàn)在再補(bǔ)充一下。我們知道數(shù)據(jù)都是使用二進(jìn)制保存和處理的,而二進(jìn)制沒(méi)有正負(fù)的概念,那么二進(jìn)制是怎么表示負(fù)數(shù)呢?現(xiàn)在就來(lái)講解這個(gè)問(wèn)題。

結(jié)論

結(jié)論放在前面:計(jì)算機(jī)中所有的數(shù)值都是用補(bǔ)碼表示的。

原碼

固定好二進(jìn)制的位數(shù)之后,用最高位來(lái)表示數(shù)值的正負(fù),最高位用0來(lái)表示正數(shù),最高位用1來(lái)表示負(fù)數(shù)。例如固定二進(jìn)制8位,十進(jìn)制10的原碼是00001010,而十進(jìn)制-10的原碼是10001010。

反碼

固定好二進(jìn)制的位數(shù)之后,正數(shù)的反碼和原碼相同,負(fù)數(shù)的反碼就是除了符號(hào)位外的所有位上,1變0,0變1。例如例如固定二進(jìn)制8位,十進(jìn)制10的反碼是00001010,而十進(jìn)制-10的反碼是11110101。

補(bǔ)碼

固定好二進(jìn)制的位數(shù)之后,正數(shù)的補(bǔ)碼和原碼相同,負(fù)數(shù)的補(bǔ)碼就是它的反碼+1。例如例如固定二進(jìn)制8位,十進(jìn)制10的補(bǔ)碼是00001010,而十進(jìn)制-10的補(bǔ)碼是11110110。

使用補(bǔ)碼的原因

以十進(jìn)制的10-6并且固定二進(jìn)制位為8位作為例子:

上面兩個(gè)數(shù)值的原碼分別是0000101010000110,如果這兩個(gè)二進(jìn)制相加,按照加法運(yùn)算的結(jié)果是10010000,轉(zhuǎn)換為十進(jìn)制就是-16,答案不正確。

上面兩個(gè)數(shù)值的補(bǔ)碼分別是0000101011111010,如果這兩個(gè)二進(jìn)制相加,按照加法運(yùn)算的結(jié)果是00000100,轉(zhuǎn)換為十進(jìn)制就是4,答案正確。

如果用原碼來(lái)表示數(shù)值,那么在運(yùn)算過(guò)程中需要做一些處理才能計(jì)算出正確結(jié)果,如果用補(bǔ)碼表示數(shù)據(jù)就不需要再處理,可以直接運(yùn)算。因此為了使運(yùn)算更加方便,計(jì)算機(jī)保存和處理數(shù)值都用補(bǔ)碼。

補(bǔ)碼轉(zhuǎn)原碼

只需要對(duì)補(bǔ)碼再進(jìn)行補(bǔ)碼操作即可。例如例如固定二進(jìn)制8位,十進(jìn)制10的補(bǔ)碼是00001010,補(bǔ)碼再補(bǔ)碼是00001010;而十進(jìn)制-10的補(bǔ)碼是11110110,補(bǔ)碼再補(bǔ)碼是10001010,也就是-10的原碼。

正負(fù)數(shù)轉(zhuǎn)換

對(duì)于unsigned intint,它們都是用二進(jìn)制32位空間來(lái)保存數(shù)據(jù)的,一個(gè)表示的是無(wú)符號(hào)的數(shù)值,另一個(gè)表示的是有符號(hào)的數(shù)值。假如有一個(gè)二進(jìn)制數(shù)據(jù)0b1111'1111'1111'1111'1111'1111'1111'1111,如果這個(gè)數(shù)值用unsigned int表示就是unsigned int的最大值;而如果這個(gè)數(shù)值用int表示就是-1。所以就有一個(gè)很神奇的現(xiàn)象就是unsigned int value = -1;,當(dāng)輸出變量value的時(shí)候,顯示的就是unsigned int的最大值。

鞏固練習(xí)

  1. +9的補(bǔ)碼。
  2. -5的補(bǔ)碼。
  3. +0-0的補(bǔ)碼。
  4. 已知一個(gè)補(bǔ)碼為11111001,求原碼。
?著作權(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)容

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