計(jì)算機(jī)中的負(fù)數(shù)為什么使用補(bǔ)碼表示

我們都知道遗淳,在計(jì)算機(jī)的內(nèi)部变泄,所有的數(shù)據(jù)都是以二進(jìn)制的形式存儲的令哟,為了區(qū)分正數(shù)和負(fù)數(shù),在最高位拿出來當(dāng)作符號位妨蛹,0表示正數(shù)屏富,1表示負(fù)數(shù)。而且蛙卤,負(fù)數(shù)的存儲役听,除了最高位的符號位,其他位使用的是補(bǔ)碼的形式存儲的表窘。
計(jì)算一個數(shù)值的二進(jìn)制補(bǔ)碼典予,以下3個步驟:

  • 求這個值的絕對值的二進(jìn)制原碼
  • 原碼取反,得到反碼
  • 反碼加1乐严,即是補(bǔ)碼

例如瘤袖,要求-18的二進(jìn)制碼,首先求18的二進(jìn)制碼:

0000 0000 0000 0000 0000 0000 0001 0010

求其反碼:

1111 1111 1111 1111 1111 1111 1110 1101

最后反碼加1

1111 1111 1111 1111 1111 1111 1110 1110

這樣就求得了-18的二進(jìn)制表示昂验。

問題來了捂敌,為什么要采用補(bǔ)碼的形式來表示負(fù)數(shù)呢?
答案是既琴,為了方便計(jì)算占婉。

為何這么說呢?下面咱們一步一步的來看這個問題甫恩。

為了簡化這個問題逆济,我們使用8位二進(jìn)制表示整數(shù)。實(shí)際計(jì)算機(jī)使用32位表示。

那么奖慌,正整數(shù) 1 的二進(jìn)制表示就是:

0000 0001

我們說過了抛虫,最高位為符號位,那么 -1 的二進(jìn)制應(yīng)該為如下形式:

1xxx xxxx

對吧简僧,最高位為1建椰,表示負(fù)數(shù)。
如果除了符號位之外岛马,其他位我們使用原碼表示的話棉姐,-1 的二進(jìn)制是不是應(yīng)該如下:

1000 0001

那么,我們來計(jì)算一下 -1 + 1 的值:

1000 0001
0000 0001
---------
1000 0010

換算成整數(shù)是多少啦逆,-2伞矩。這和正常的邏輯,-1+1=0相差甚遠(yuǎn)蹦浦。為什么,除了符號位撞蜂,正常位使用的是原碼盲镶,那么-1和1是相同的,都是1溉贿,相加的結(jié)果是2,再加上符號位宇色,-2.
從這里我們可以看出颁湖,除了符號位宣蠕,負(fù)數(shù)的其他位斷然不能使用原碼表示。否則會出現(xiàn)計(jì)算邏輯錯誤甥捺。

開篇我們說過了抢蚀,負(fù)數(shù)采用補(bǔ)碼的形式镰禾,那么,補(bǔ)碼這個定義怎么來的吴侦,為什么這么計(jì)算呢屋休?
我們慢慢來看。
-1 + 1 = 0這個不必多說對吧备韧,0的二進(jìn)制是什么劫樟?

0000 0000

那么,-1 + 1 = 0二進(jìn)制是不是應(yīng)該如下面的方式進(jìn)行表示:

1xxx xxxx
0000 0001
---------
0000 0000

可能有人會問了毅哗,怎么可能,不管-1的二進(jìn)制中x是多少尿瞭,符號位 1 + 0 = 1啊翅睛,算出來的永遠(yuǎn)是個負(fù)數(shù)吧椤捕发??扎酷?
是啊,但是如果發(fā)生進(jìn)位了呢谁榜?我們采用8位表示一個整數(shù)凡纳,如果發(fā)生進(jìn)位了,產(chǎn)生了9位荐糜,發(fā)生了溢出:

1 0000 0000

由于發(fā)生了溢出,最高位的1被舍棄暴氏,取低8位,是多少页畦,0 啊研儒,對不對。
那-1的二進(jìn)制碼是多少才能使計(jì)算發(fā)生進(jìn)位端朵,算一下啦,-1的二進(jìn)制應(yīng)該是:

 1111 1111       //-1
 0000 0001       //1
----------
10000 0000      //發(fā)生進(jìn)位舍败,最高位1被舍棄,最后結(jié)果為0

好了邻薯,到這里我們知道了,-1的二進(jìn)制表示為1111 1111厕诡,那有什么規(guī)律嗎,到底怎么算才能得到這個二進(jìn)制表示壹罚,我們不能每次求一個負(fù)數(shù)的二進(jìn)制的時候都用發(fā)生進(jìn)位的二進(jìn)制去減正數(shù)的二進(jìn)制來獲取笆傩摺猖凛?

是的绪穆,我們來找一下規(guī)律看看。
試想一下菠红,什么時候會發(fā)生進(jìn)位,發(fā)生溢出呢途乃?
所有的位都變成了1, 再加1就進(jìn)位發(fā)生溢出了呀扔傅。我們再來看一下上面的計(jì)算烫饼,

 1111 1111       //-1
 0000 0001       //1
----------
10000 0000      //發(fā)生進(jìn)位,最高位1被舍棄杠纵,最后結(jié)果為0

那么,對于一個二進(jìn)制而言铝量,怎么才能得到全部的位都是1呢银亲?
反碼啊,不管你二進(jìn)制的位是0還是1务蝠,加上他的反碼后得到的就是全部的位都是1,好了,再加1践瓷,就得到了0.
我們就把反碼加1的這個值作為負(fù)數(shù)的二進(jìn)制表示亡蓉。我們把這種形式叫做補(bǔ)碼,也就是上面我們從書里看到的寸宵,補(bǔ)碼的計(jì)算,其反碼加1.

采用補(bǔ)碼巫员,正負(fù)相加為0的計(jì)算能夠表示清楚了甲棍,那么其他呢計(jì)算對不對呢,比如 -5 + 3感猛,-4 + (-2)等的形式呢?
先來看看 -5 + 3

-5的二進(jìn)制: 1111 1011
3的二進(jìn)制:  0000 0011
           ---------
           1111 1110

哪個數(shù)的二進(jìn)制是1111 1110呢颈走,首先看符號位是1咱士,說明是一個負(fù)數(shù),我們按照負(fù)數(shù)二進(jìn)制補(bǔ)碼的計(jì)算方式序厉,逆運(yùn)算回去

 1111 1110       
-        1       //減1
 ---------
 1111 1101       //得到反碼
 0000 0010       //取反

因此,得到的數(shù)是 0000 0010道盏,這個數(shù)的值是2.由于符號位為1文捶,因此這里是-2.即-5+3=-2

如果都是負(fù)數(shù)呢,-4 + (-2)

-4的二進(jìn)制:1111 1100
-2的二進(jìn)制:1111 1110
        -----------
         11111 1010

這里超出8位粹排,發(fā)生溢出,最高位舍棄院促,最終結(jié)果 1111 1010
符號位1,表示負(fù)數(shù)常拓。逆運(yùn)算回去:

1111 1010
        1   //減1
1111 1001
0000 0110   //取反

獲得的值為 2^1 + 2^2 = 6
由于符號位為1表示負(fù)數(shù),最終結(jié)果是 -6

由此看來茎辐,負(fù)數(shù)采用補(bǔ)碼的形式掂恕,是為了方便計(jì)算機(jī)內(nèi)的運(yùn)算“猛觯總的下來,也明白了補(bǔ)碼是怎么來的速警,怎么運(yùn)算的鸯两。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市钧唐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌该园,老刑警劉巖机错,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件父腕,死亡現(xiàn)場離奇詭異,居然都是意外死亡萧诫,警方通過查閱死者的電腦和手機(jī)枝嘶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來群扶,“玉大人镀裤,你說我怎么就攤上這事缴饭。” “怎么了担猛?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵丢氢,是天一觀的道長。 經(jīng)常有香客問我疚察,道長,這世上最難降的妖魔是什么载碌? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任衅枫,我火速辦了婚禮,結(jié)果婚禮上步咪,老公的妹妹穿的比我還像新娘益楼。我一直安慰自己,他們只是感情好感凤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著禽翼,像睡著了一般族跛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上礁哄,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天桐绒,我揣著相機(jī)與錄音之拨,去河邊找鬼咧叭。 笑死敦锌,一個胖子當(dāng)著我的面吹牛佳簸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播听想,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼马胧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了佩脊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤出牧,失蹤者是張志新(化名)和其女友劉穎歇盼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伯复,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邢笙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叮雳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐骇。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡江滨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唬滑,到底是詐尸還是另有隱情棺弊,我是刑警寧澤擒悬,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站侈净,受9級特大地震影響僧凤,放射性物質(zhì)發(fā)生泄漏畜侦。R本人自食惡果不足惜躯保,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一途事、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尸变,春花似錦、人聲如沸召烂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桶蛔。三九已至,卻和暖如春蹂析,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背电抚。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工竖共, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人借帘。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像肺然,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拾碌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容