補(bǔ)碼的意義

基本概念

在計算機(jī)中晶框,二進(jìn)制數(shù)據(jù)有三種形式:原碼煌集、反碼和補(bǔ)碼,要弄清楚補(bǔ)碼的意義姨涡,首先讓我們來了解三種形式的定義史煎。

假設(shè)字長為4谦屑,其中最高位為符號位:正數(shù)為0,負(fù)數(shù)為1篇梭。剩下的3位表示該數(shù)的絕對值氢橙。
正數(shù)的原碼反碼補(bǔ)碼都是一樣的。

1.原碼

+3的原碼:0011

-3的原碼:1011

2.反碼

反碼就是在原碼的基礎(chǔ)上恬偷,符號位不變其他位按位取反(就是0變1悍手,1變0)就可以了。

+3的反碼:0011

-3的反碼:1100

3.補(bǔ)碼

補(bǔ)碼也非常的簡單袍患,就是在反碼的基礎(chǔ)上按照正常的加法運算加1坦康。

+3的補(bǔ)碼:0011

-3的補(bǔ)碼:1101

從前面的三種數(shù)字編碼類型的定義,我們可以看出數(shù)據(jù)的原碼诡延,使用符號位來區(qū)分了正負(fù)數(shù)滞欠,更加符合人腦直觀識別并且用于計算的表達(dá)方式。但是在計算機(jī)中肆良,是通過補(bǔ)碼的形式保存數(shù)據(jù)筛璧,下面將解釋為什么計算機(jī)系統(tǒng)要用補(bǔ)碼存放數(shù)據(jù)。

周期系統(tǒng)

若一組事件或現(xiàn)象按同樣的順序重復(fù)出現(xiàn)惹恃,則把完成這一組事件或現(xiàn)象的時間或空間間隔夭谤,稱為周期。

周期性原碼累加系統(tǒng)

定義一個字長為4的二進(jìn)制累加系統(tǒng)巫糙,該系統(tǒng)的規(guī)則就是從左到右依次累加0001朗儒;

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0

如果最高位是符號位時,圖表第二行表示原碼對應(yīng)的10進(jìn)制數(shù)曲秉,不難發(fā)現(xiàn)采蚀,如果在確定字長為4時,累加過程是符合周期性變化的承二,原因就是當(dāng)1111+1時會出現(xiàn)字節(jié)溢出的情況榆鼠,10000的最高位溢出失效,導(dǎo)致結(jié)果變?yōu)?000亥鸠;

周期性時鐘系統(tǒng)

在現(xiàn)實生活中妆够,時鐘顯然是符合周期性的识啦,12點過后是1點,人們早已習(xí)慣了這種思維方式神妹,所以會忽略對時鐘這種表示時間方式的思考颓哮。凌晨12點加1個小時,其實表式的時間是天數(shù)加1之后的1點鸵荠,但是對于時鐘系統(tǒng)而言冕茅,天數(shù)不是自己所能表示的,這就相當(dāng)于上面圖表中1111+1=0000(1|0000 1是溢出位蛹找,在字長為4的系統(tǒng)中是不能表示的)姨伤。

時鐘系統(tǒng)和二進(jìn)制數(shù)原碼的累加系統(tǒng)都有周期性,具有周期性的原因是當(dāng)前層次系統(tǒng)中有其不能表示或未能感知的其他層次系統(tǒng)庸疾。

計算機(jī)運算系統(tǒng)正是利用了周期性的這一特性乍楚。

周期系統(tǒng)中的加減轉(zhuǎn)化

時鐘系統(tǒng)加減法轉(zhuǎn)化

假設(shè)時針向順時針方向撥動為加,逆時針撥動為減届慈。

7點順時針撥動1格表示的是:7+1=8

7點逆時針撥動1格表示的是:7-1=6

7點順時針撥動11格表示的是:7+11=6

所以很容易發(fā)現(xiàn)徒溪,在時鐘中7-1=7+11,這就是周期系統(tǒng)中加減法發(fā)的轉(zhuǎn)化方式金顿,其實和簡單臊泌,也很符合我們的直覺。

所以重新考慮原碼的減法問題揍拆,n-m = n+(MAX-m),其中MAX就是該周期中所能表示的所有數(shù)的數(shù)量缺虐,放到上面原碼的例子中就是16個,而放到時鐘系統(tǒng)中就是12個礁凡。如:

周期性的時鐘系統(tǒng):

12 - 1 = 12 + (12 -1);

7 - 4 = 7 +(12-4)慧妄;

累加系統(tǒng)加減法轉(zhuǎn)化

在說原碼累加系統(tǒng)加減法轉(zhuǎn)化例子之前顷牌,我們再看下圖表

A 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000
A1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0
A2 0 1 2 3 4 5 6 7 -0 -1 -2 -3 -4 -5 -6 -7 0
B 0000 0001 0010 0011 0100 0101 0110 0111 1111 1110 1101 1100 1011 1010 1001 1000 0000
B1 0 1 2 3 4 5 6 7 -7 -6 -5 -4 -3 -2 -1 -0 0
B2 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1 0

為了方便說明在每一行的開始定義了該行的名稱分別為A、A1塞淹、A2窟蓝、B、B1饱普、B2.

累加系統(tǒng)不同于周期系統(tǒng)的一點是會有負(fù)數(shù)的概念出現(xiàn)运挫,A2行就是最高位表示符號位時原碼解碼后表示的十進(jìn)制數(shù)。在圖表中發(fā)現(xiàn)套耕,當(dāng)有符號位時二進(jìn)制原碼的累加轉(zhuǎn)換為十進(jìn)制數(shù)時谁帕,出現(xiàn)了與我們現(xiàn)實生活數(shù)學(xué)公理相違背的現(xiàn)象,錯誤發(fā)生在最高位為1后冯袍,如1001+1=1010(-1+1=-2)匈挖,原因是在定義這個累加系統(tǒng)在運算時就沒有讓系統(tǒng)知道高位0與1有不同之處碾牌,也就是累加的計算過程中無法感知符號。

解決問題的方式有兩種

  1. 去重新完善這個累加系統(tǒng)儡循,讓他在最高位為1換一套計算方式舶吗,也就是說在運算過程中去感知最高位的意義。
  2. 轉(zhuǎn)化出現(xiàn)問題的狀態(tài)择膝,使?fàn)顟B(tài)轉(zhuǎn)移為當(dāng)前系統(tǒng)能使用的誓琼,也就是在編碼過程中去讓無法感知符號的運算系統(tǒng)計算出正確的結(jié)果。

在計算機(jī)系統(tǒng)中肴捉,解決這個問題的方式顯然是用第二種腹侣,cpu是無法感知符號位的,這樣做可以減少cpu設(shè)計難度每庆,極大地提高運行效率筐带。

所以也就是說cpu運算時還是按照A行進(jìn)行累加,但在解碼運算結(jié)果時做一些處理缤灵,即將A轉(zhuǎn)變?yōu)锽伦籍,而B1是不考慮溢出和臨界值時的十進(jìn)制正確結(jié)果。A解碼為B的算法就是當(dāng)最高位為1時腮出,符號位不變帖鸦,其他位取反,不難發(fā)現(xiàn)這就是反碼的定義胚嘲。

當(dāng)這樣轉(zhuǎn)化后會發(fā)現(xiàn)出現(xiàn)了0和-0兩個0并且會出現(xiàn)0 - 1 = -0這種情況(將0向左移動)作儿。所以還得做一個簡單的處理,就是去加一個1馋劈,也就是B1轉(zhuǎn)化為B2,而B2就是最終的正確十進(jìn)制值攻锰。

其實按照直覺可以發(fā)現(xiàn),當(dāng)符號位轉(zhuǎn)化時妓雾,其他位應(yīng)該取反才能得到正確結(jié)果娶吞,正數(shù)越加越大,負(fù)數(shù)越加越小械姻。

根據(jù)我們的努力將A通過反碼的解碼方式轉(zhuǎn)變?yōu)锽,而讓B的解碼結(jié)果加1(補(bǔ)碼)妒蛇,得到了B2,從而使累加系統(tǒng)當(dāng)出現(xiàn)負(fù)數(shù)時變得合理起來。在轉(zhuǎn)變?yōu)锽2之后楷拳,我們需要解決的是如何用累加系統(tǒng)去表示減法绣夺。本質(zhì)上和前面的時鐘系統(tǒng)轉(zhuǎn)化是一樣的』兑荆可以借助上面的時鐘系統(tǒng)以及下面的例子去理解累加系統(tǒng)的減法運算陶耍。

在看例子之前,稍微介紹一下“慕牵” 的概念:
模是指一個計量系統(tǒng)的計數(shù)范圍物臂,取模運算實質(zhì)上是計量器產(chǎn)生“溢出”的量旺拉,前面的周期系統(tǒng)中n-m = n+(MAX-m)得出的加減轉(zhuǎn)化其實就是用到了模的概念,MAX就是模棵磷。

計算 4 - 3

  1. 編碼 0100 - 0011

//n-m = n+(MAX-m) ==》(10000-0011) 其結(jié)果就是0011的補(bǔ)碼

  1. 轉(zhuǎn)化為 0100 + (10000-0011) = 0100 + 1101

  2. cpu調(diào)用加法器得出 10001

  3. 最高位溢出 0001

  4. 解碼 1

重新計算 3 - 4

  1. 編碼 0011 - 0100

  2. 轉(zhuǎn)化為 0011 + (10000-0100) = 0011 + 1100

  3. cpu調(diào)用加法器得出 1111

//參考A轉(zhuǎn)變B2(也就是原碼轉(zhuǎn)補(bǔ)碼)

  1. 解碼-0001= -1

總結(jié)

在計算機(jī)系統(tǒng)中蛾狗,計算整數(shù)加減法時,需要經(jīng)過以下步驟:

  1. 轉(zhuǎn)變?yōu)?進(jìn)制數(shù)仪媒;

  2. 運算時原碼解碼為補(bǔ)碼沉桌;n-m = n+(MAX-m),(MAX-m)也就是m的補(bǔ)碼算吩,理解時參考時鐘系統(tǒng)留凭。

  3. cpu調(diào)用加法器;

  4. 解碼偎巢;再進(jìn)行一次補(bǔ)碼解碼蔼夜,理解時參考A轉(zhuǎn)化為B2。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末压昼,一起剝皮案震驚了整個濱河市求冷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窍霞,老刑警劉巖匠题,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異但金,居然都是意外死亡韭山,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門冷溃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钱磅,“玉大人,你說我怎么就攤上這事似枕⌒螅” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵菠净,是天一觀的道長。 經(jīng)常有香客問我彪杉,道長毅往,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任派近,我火速辦了婚禮攀唯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渴丸。我一直安慰自己侯嘀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布戒幔。 她就那樣靜靜地躺著,像睡著了一般诗茎。 火紅的嫁衣襯著肌膚如雪工坊。 梳的紋絲不亂的頭發(fā)上敢订,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音昭齐,去河邊找鬼。 笑死矾柜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的把沼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饮睬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捆愁?” 一聲冷哼從身側(cè)響起割去,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昼丑,沒想到半個月后呻逆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡菩帝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年咖城,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呼奢。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡宜雀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出握础,到底是詐尸還是另有隱情辐董,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布禀综,位于F島的核電站简烘,受9級特大地震影響苔严,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孤澎,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一届氢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亥至,春花似錦悼沈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茶敏,卻和暖如春壤靶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惊搏。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工贮乳, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恬惯。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓向拆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酪耳。 傳聞我的和親對象是個殘疾皇子浓恳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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