原碼拯杠、反碼晾嘶、補(bǔ)碼

??在大學(xué)學(xué)習(xí)很多計(jì)算機(jī)課程時号醉,第一章節(jié)總會遇到原碼悉抵、反碼岭皂、補(bǔ)碼這哥仨茬贵,再后面就完全見不到了簿透,當(dāng)時只是跟著書上的方法去計(jì)算,也不知道這玩意算出來是干啥的解藻,為什么要引入這哥仨老充。本文就是從說明原碼、反碼螟左、補(bǔ)碼的引入原因來解釋這三個名詞蚂维,所以介紹的順序與大學(xué)課本有所不同戳粒,本文的介紹順序是原碼、補(bǔ)碼虫啥、反碼蔚约,望知悉。

一涂籽、背景

??大家都知道苹祟,在計(jì)算機(jī)內(nèi)部,數(shù)據(jù)都是以二進(jìn)制的方式存儲運(yùn)算的评雌,為什么采用二進(jìn)制而不采用大家熟悉的十進(jìn)制树枫?因?yàn)槎M(jìn)制最簡單、最好實(shí)現(xiàn)景东,只要一個事物具有兩種對立狀態(tài)都可以作為二進(jìn)制思想的實(shí)現(xiàn)砂轻,比如使用元件開關(guān)特性、電壓高低特性即可實(shí)現(xiàn)斤吐。
??根據(jù)馮諾依曼提出的經(jīng)典計(jì)算機(jī)體系結(jié)構(gòu)框架搔涝。一臺計(jì)算機(jī)由運(yùn)算器,控制器和措,存儲器庄呈,輸入和輸出設(shè)備組成。其中運(yùn)算器派阱,只有加法運(yùn)算器诬留,沒有減法運(yùn)算器(據(jù)說一開始是有的,后來由于減法器硬件開銷太大贫母,被廢了 )
所以文兑,計(jì)算機(jī)中是無法直接做減法的,它的減法是通過加法來實(shí)現(xiàn)的腺劣。你也許會說彩届,現(xiàn)實(shí)世界中所有的減法也可以當(dāng)成加法的,減去一個數(shù)誓酒,可以看作加上這個數(shù)的相反數(shù)。當(dāng)然沒錯贮聂,但是前提是要先有負(fù)數(shù)的概念靠柑。這就為什么不得不引入一個該死的符號位。由此吓懈,人們發(fā)明了原碼表示法歼冰。

二、原碼表示法

1耻警、計(jì)算方法

原碼:用最高位表示符號位隔嫡,‘1’表示負(fù)號甸怕,‘0’表示正號。其他位存放該數(shù)的二進(jìn)制的絕對值腮恩。

2梢杭、說明

若以帶符號的四位二進(jìn)制數(shù)為例:

1010 : 最高位為‘1’,表示這是一個負(fù)數(shù),其他三位為‘010’秸滴,即(0*2^2)+(1*2^1)+(0*2^0)=2(‘^’表示冪運(yùn)算符)武契。所以1010表示十進(jìn)制數(shù)(-2)。

下圖給出部分正負(fù)數(shù)數(shù)的二進(jìn)制原碼表示法:


原碼.png

OK荡含,原碼表示法很簡單有沒有咒唆,雖然出現(xiàn)了+0和-0,但是直觀易懂释液。
于是全释,我們高興的開始運(yùn)算。

0001+0010=0011    (1+2=3)OK
0000+1000=1000    (+0+(-0)=-0) 額误债,問題不大
0001+1001=1010    (1+(-1)=-2)

what? 1+(-1)=-2浸船,逗我玩的吧?
如果采用原碼表示法找前,看來是不能這樣簡單的做加法運(yùn)算的糟袁,必須這樣處理:當(dāng)兩數(shù)相加時,如果是同號則數(shù)值相加躺盛;如果是異號项戴,則要進(jìn)行減法。而在進(jìn)行減法時槽惫,還要先比較絕對值的大小周叮,然后大數(shù)減去小數(shù),最后還要給結(jié)果選擇恰當(dāng)?shù)姆枴?br> 如果這樣去實(shí)現(xiàn)界斜,太復(fù)雜了吧仿耽,有沒有簡單點(diǎn)的方法,于是人們找到了補(bǔ)碼表示法各薇。

三项贺、補(bǔ)碼表示法

1、實(shí)現(xiàn)思想

藝術(shù)源于生活
其實(shí)人類的很多發(fā)明創(chuàng)意都是來源于生活峭判,例如魯班根據(jù)有齒的小草發(fā)明了鋸开缎、意大利發(fā)明家博列里通過對魚類的觀察發(fā)明了潛水艇、科學(xué)家根據(jù)蜻蜓飛行結(jié)構(gòu)研制出了直升飛機(jī)等等林螃。補(bǔ)碼的思想源于時鐘的運(yùn)動奕删。

假設(shè)現(xiàn)在的標(biāo)準(zhǔn)時間為4點(diǎn)整,而有一只表已經(jīng)7點(diǎn)了疗认,為了校準(zhǔn)時間完残,可以采用兩種方法:一是將時針退7-4=3格伏钠;一是將是針向前撥12-3=9格。這兩種方法都能對準(zhǔn)到4點(diǎn)谨设,由此看出熟掂,減3和加9是等價的。就是說9是(-3)對12的補(bǔ)碼铝宵,可以用數(shù)學(xué)公式表示為:

-3 = +9 ?? (mod 12)

mod 12的意思就是12為模數(shù)打掘,這個“模”表示被丟掉的數(shù)值鹏秋。上式在數(shù)學(xué)上稱為同余式尊蚁。
上例中之所以7-3和7+9(mod 12)等價,原國就是表指針超過12時侣夷,將12自動丟掉横朋,最后得到16-12=4。
由此得到一個啟發(fā)百拓,就是負(fù)數(shù)用補(bǔ)碼表示時琴锭,可以把減法轉(zhuǎn)化為加法。這樣衙传,在計(jì)算機(jī)中實(shí)現(xiàn)起來就比較方便决帖。
采用補(bǔ)碼表示法進(jìn)行減法運(yùn)算比原碼方便多了。因?yàn)椴徽摂?shù)是正或負(fù)蓖捶,機(jī)器總是做加法地回,減法運(yùn)算可變成加法運(yùn)算。但根據(jù)補(bǔ)碼定義俊鱼,求負(fù)數(shù)的補(bǔ)碼還要做減法這顯然不方便刻像,為此可通過反碼來解決。

2并闲、計(jì)算方法

補(bǔ)碼:正數(shù)的補(bǔ)碼等于他的原碼
???負(fù)數(shù)的補(bǔ)碼等于反碼+1细睡。(反碼的知識見下一小節(jié))

下圖給出部分帶符號位四位二進(jìn)制的補(bǔ)碼表示法


補(bǔ)碼.png

根據(jù)上面的補(bǔ)碼圖,我們可以做幾道運(yùn)算(下面運(yùn)算中括號中為十進(jìn)制):

0001(1)+ 1111(-1)= 0000(0)
1111(-1)+1110(-2)= 1101(-3)

至此帝火,我們發(fā)現(xiàn)減法的問題解決了溜徙,正0、負(fù)0的問題也解決了犀填,計(jì)算機(jī)可以很容易只通過加法來計(jì)算加減運(yùn)算了蠢壹。

四、反碼表示法

1宏浩、計(jì)算方法

反碼:正數(shù)的反碼還是等于原碼
???負(fù)數(shù)的反碼就是他的原碼除符號位外,按位取反靠瞎。

2比庄、說明

反碼的引入主要是為了解決計(jì)算一個負(fù)數(shù)的補(bǔ)碼求妹。
若以帶符號的四位二進(jìn)制數(shù)為例:

3是正數(shù),反碼與原碼相同佳窑,則可以表示為0011
-3的原碼是1011制恍,符號位保持不變,低三位(011)按位取反得(100)神凑,所以-3的反碼為1100

下圖給出部分正負(fù)數(shù)的二進(jìn)制數(shù)反碼表示法


反碼.png

負(fù)數(shù)的反碼加上這個負(fù)數(shù)的絕對值正好等于1111净神,再加1,就是1000溉委,也就是四位二進(jìn)數(shù)的模鹃唯。而負(fù)數(shù)的補(bǔ)碼是它的絕對值的同余數(shù),可以通過模減去負(fù)數(shù)的絕對值瓣喊,得到他的補(bǔ)碼坡慌。
所以 負(fù)數(shù)的補(bǔ)碼就是它的反碼+1。

總結(jié)

1藻三、原碼的引入是由于計(jì)算機(jī)是采用二進(jìn)制來運(yùn)算和存儲的洪橘,補(bǔ)碼的引入主要是為了解決負(fù)數(shù)的運(yùn)算的,而反碼的引入是為了方便計(jì)算補(bǔ)碼棵帽。
2熄求、計(jì)算機(jī)中所有數(shù)據(jù)都是以補(bǔ)碼的形式存儲、計(jì)算的逗概。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弟晚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仗谆,更是在濱河造成了極大的恐慌指巡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隶垮,死亡現(xiàn)場離奇詭異藻雪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狸吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門勉耀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹋偏,你說我怎么就攤上這事便斥。” “怎么了威始?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵枢纠,是天一觀的道長。 經(jīng)常有香客問我黎棠,道長晋渺,這世上最難降的妖魔是什么镰绎? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮木西,結(jié)果婚禮上畴栖,老公的妹妹穿的比我還像新娘。我一直安慰自己八千,他們只是感情好吗讶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恋捆,像睡著了一般照皆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸠信,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天纵寝,我揣著相機(jī)與錄音,去河邊找鬼星立。 笑死爽茴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绰垂。 我是一名探鬼主播室奏,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劲装!你這毒婦竟也來了胧沫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤占业,失蹤者是張志新(化名)和其女友劉穎绒怨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谦疾,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡南蹂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了念恍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片六剥。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖峰伙,靈堂內(nèi)的尸體忽然破棺而出疗疟,到底是詐尸還是另有隱情,我是刑警寧澤瞳氓,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布策彤,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏店诗。R本人自食惡果不足惜叽赊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望必搞。 院中可真熱鬧,春花似錦囊咏、人聲如沸恕洲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霜第。三九已至,卻和暖如春户辞,著一層夾襖步出監(jiān)牢的瞬間泌类,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工底燎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刃榨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓双仍,卻偏偏與公主長得像枢希,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朱沃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • http://www.reibang.com/p/55a8195291db本篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)...
    PupilCHen閱讀 1,192評論 1 48
  • 本篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)碼. 并且進(jìn)行了深入探求了為何要使用反碼和補(bǔ)碼, 以及更進(jìn)一步的論證了為何可...
    yang2yang閱讀 2,247評論 1 13
  • 本篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)碼. 并且進(jìn)行了深入探求了為何要使用反碼和補(bǔ)碼, 以及更進(jìn)一步的論證了為何可...
    david9閱讀 680評論 0 0
  • 到目前為止,我們學(xué)習(xí)了十進(jìn)制翎卓、二進(jìn)制契邀、八進(jìn)制、十六進(jìn)制等用來代表實(shí)際數(shù)值的數(shù)莲祸,稱為真值蹂安,這些數(shù)我們再日常生活中都會...
    codingriver閱讀 26,578評論 4 13
  • 本篇文章講解了計(jì)算機(jī)的原碼, 反碼和補(bǔ)碼. 并且進(jìn)行了深入探求了為何要使用反碼和補(bǔ)碼, 以及更進(jìn)一步的論證了為何可...
    某人在閱讀 512評論 0 1