編碼:實(shí)現(xiàn)減法

1 前言

??本文是基于《編碼》狗唉、《穿越計(jì)算機(jī)的迷霧》兩部著作進(jìn)行讀后整理的記錄性博客耍群。對(duì)書(shū)中較為重要的內(nèi)容進(jìn)行歸納整理進(jìn)行二次創(chuàng)作香椎,略去了繁瑣的講述細(xì)節(jié)乐埠,力求簡(jiǎn)明扼要抗斤。


編碼:一種由若干符號(hào)和規(guī)則組成的系統(tǒng),用來(lái)向計(jì)算機(jī)表述指令丈咐。

2 正文

2.1 如何實(shí)現(xiàn)減法

??加法和減法在某些方面相互補(bǔ)充瑞眼,但在機(jī)制方面這兩個(gè)運(yùn)算則是不同的。加法是始終從兩個(gè)加數(shù)的最右列向最左列進(jìn)行計(jì)算的棵逊。每一列的進(jìn)位加到下一列中伤疙。在減法中沒(méi)有進(jìn)位,而是有借位——一種與加法存在本質(zhì)區(qū)別的麻煩機(jī)制辆影。

??要解決這個(gè)問(wèn)題徒像,首先從最右列著手。我們看到蛙讥,6 是大于 3 的厨姚,因此從 5 上借 1,再用 13 減去 6键菱,得到結(jié)果為 7谬墙。由于我們已經(jīng)在 5 上借了 1,因此经备,現(xiàn)在實(shí)際上那一位是 4拭抬,而 4 是小于 7 的,因此繼續(xù)從 2 上借 1侵蒙,14 減 7 結(jié)果為 7造虎。而由于在 2 上借了 1,實(shí)際上這一位是 1纷闺,從中減去 1算凿,結(jié)果為 0。因此犁功,最后的結(jié)果應(yīng)為 77氓轰。

??如何才能通過(guò)一連串邏輯門(mén)來(lái)實(shí)現(xiàn)這個(gè)反邏輯呢?

??然而浸卦,我們并不打算這樣做署鸡。相反,我們打算用一個(gè)小技巧來(lái)讓減法不涉及借位。為了避免借位靴庆,首先要從 999 中減去減數(shù)时捌,而不是從原來(lái)的被減數(shù)中減去減數(shù)。從一串 9 中減去一個(gè)數(shù)叫做對(duì) 9 求補(bǔ)數(shù)炉抒。176 對(duì) 9 的補(bǔ)數(shù)是 823奢讨。

??計(jì)算出減數(shù)對(duì) 9 的補(bǔ)數(shù)后,將補(bǔ)數(shù)與原來(lái)的被減數(shù)相加:

??最后再將結(jié)果加 1焰薄,并減去 1000拿诸。

??到此,我們就得到了結(jié)果蛤奥。答案與先前的相同佳镜,而且沒(méi)有用到借位。

??我們按照前面的步驟梳理一下計(jì)算過(guò)程凡桥。原題目是這樣的:
253-176

??這個(gè)式子于下面的式子等價(jià):
253+(999-176)+1-1000

??我們用兩個(gè)減法和兩個(gè)加法來(lái)替代一個(gè)減法蟀伸,而在這個(gè)過(guò)程中避免了煩瑣的借位。

??如果減數(shù)大于被減數(shù)會(huì)怎么樣呢缅刽?例如以下問(wèn)題:

??如果希望求解這個(gè)問(wèn)題而不使用借位的話啊掏,就要采用與之前稍微不同的方法。首先要像前面一樣衰猛,用 999 減去減數(shù) 253迟蜜,計(jì)算出對(duì) 9 的補(bǔ)數(shù):

??把該數(shù)對(duì) 9 的補(bǔ)數(shù)與被減數(shù)相加:

??在前面的例子中,下一步應(yīng)該加 1啡省,并減去 1000 來(lái)得到最終結(jié)果娜睛。但是在這里,這種方法并不適用卦睹。因?yàn)槟銜?huì)遇到 923 減去 1000 的情況畦戒,這又導(dǎo)致了借位。由于我們之前已經(jīng)加了 999结序,這里再減去 999:

??到這里障斋,我們會(huì)意識(shí)到這個(gè)問(wèn)題的結(jié)果是負(fù)數(shù),因此需要將減數(shù)與被減數(shù)交換徐鹤,用 999 減去 922(也即改成 999 - 922垃环,結(jié)果加上負(fù)號(hào))。這里沒(méi)有用到借位返敬,結(jié)果與我們期望的相同:

??同樣我們來(lái)回顧總結(jié)一下上述的計(jì)算過(guò)程遂庄。原題目是這樣的:
176-253

??這個(gè)式子于下面的式子等價(jià):
999-253+176-999

??同樣的技巧可以用于二進(jìn)制數(shù)中,而且實(shí)際上這要比十進(jìn)制數(shù)簡(jiǎn)單救赐。

實(shí)際上這上面介紹的針對(duì)減法的用于避免借位的計(jì)算技巧主要是保持計(jì)算過(guò)程中永遠(yuǎn)是對(duì)位最大的數(shù)(999)減去小的數(shù)涧团,這樣的話在相減的過(guò)程中就避免了要向前面借位只磷,可以直接減掉经磅。而由于是十進(jìn)制下所以對(duì)位最大的數(shù)是 9泌绣,利用對(duì)位最大數(shù)去減去任何數(shù)都不涉及借位的操作。而對(duì)于二進(jìn)制下预厌,對(duì)位最大的數(shù)是 1阿迈,也即計(jì)算出該數(shù)在二進(jìn)制下對(duì) 1 的補(bǔ)數(shù)。111 在二進(jìn)制下的作用就相當(dāng)于十進(jìn)制下的 999轧叽。

??將上面提到的 254 - 176 轉(zhuǎn)化為二進(jìn)制數(shù)進(jìn)行計(jì)算苗沧,那么問(wèn)題變?yōu)椋?/p>

??同樣的,求補(bǔ)數(shù):

??在求對(duì) 1 的補(bǔ)數(shù)時(shí)炭晒,只需將原來(lái)的二進(jìn)制數(shù)中的 1 變?yōu)?0待逞,將 0 變?yōu)?1 即可。因此對(duì) 1 求補(bǔ)數(shù)有時(shí)也會(huì)稱(chēng)為相反數(shù)(negation)或反碼(inverse)网严。在前面的內(nèi)容中我們介紹過(guò)反向器识樱,它的作用就是將 0 變?yōu)?1,將 1 變?yōu)?0震束。

??將減數(shù)對(duì) 1 的補(bǔ)數(shù)與被減數(shù)相加:

??將上式所得結(jié)果加 1怜庸,減去 100000000(即 256):

??我們把這兩個(gè)數(shù)顛倒位置后再做一遍。在十進(jìn)制中垢村,減法題目對(duì)應(yīng)于 176 - 253割疾。而用二進(jìn)制表示為:

??計(jì)算過(guò)程如下,最后計(jì)算結(jié)果加上負(fù)號(hào):

??了解了上述計(jì)算技巧后嘉栓,我們可以開(kāi)始嘗試實(shí)現(xiàn)一下減法的操作宏榕。下面構(gòu)建的減法器適用于計(jì)算結(jié)果為正數(shù)的減法操作。

??針對(duì)求補(bǔ)數(shù)的計(jì)算過(guò)程侵佃,二進(jìn)制數(shù)對(duì)1求補(bǔ)數(shù)相當(dāng)于對(duì)其每位取反麻昼,因此我們可以利用反向器來(lái)實(shí)現(xiàn)相應(yīng)的操作。以 8 為二進(jìn)制減法為例趣钱,我們計(jì)算 8 位二進(jìn)制數(shù)補(bǔ)數(shù)的時(shí)候可以簡(jiǎn)單地應(yīng)用 8 個(gè)反向器涌献。

??問(wèn)題是,該電路只會(huì)對(duì)輸入求反首有,而我們要的是一臺(tái)既能做加法又能做減法的機(jī)器燕垃,因此就要求該電路當(dāng)且僅當(dāng)進(jìn)行減法運(yùn)算時(shí)才實(shí)現(xiàn)反轉(zhuǎn)。電路可以改造為如下圖所示井联。

??標(biāo)記為 “取反” 的信號(hào)將被輸入到每一個(gè)異或門(mén)中卜壕。回想一下異或門(mén)的工作方式烙常,如下表所示轴捎。

??因此鹤盒,如果 “取反” 信號(hào)是 0,則 8 個(gè)異或門(mén)輸出與輸入相同侦副。例如侦锯,如果輸入是 01100001,那么輸出也為 01100001秦驯。如果 “取反” 信號(hào)為 1尺碰,則輸出信號(hào)反置。例如译隘,如果輸入為 01100001亲桥,輸出則為 10011110。

??將 8 個(gè)異或門(mén)合并起來(lái)畫(huà)成一個(gè)器件固耘,稱(chēng)為求補(bǔ)器(One’sComplement)题篷,如下所示。

??將一個(gè)求補(bǔ)器厅目,一個(gè) 8 位二進(jìn)制加法器和一個(gè)異或門(mén)做如下連接番枚。

??注意,這里三個(gè)信號(hào)都標(biāo)識(shí)為 “SUB”璧瞬,這就是加/減法轉(zhuǎn)換開(kāi)關(guān)户辫。當(dāng)該信號(hào)為 0 的時(shí)候,其進(jìn)行的是加法運(yùn)算嗤锉,為 1 時(shí)進(jìn)行的則是減法運(yùn)算渔欢。在減法中,輸入 B(第二排開(kāi)關(guān))在送入加法器之前瘟忱,需先通過(guò)求補(bǔ)電路進(jìn)行取反奥额。此外,在做減法時(shí)访诱,我們通過(guò)設(shè)定 CI(進(jìn)位輸入)為 1 來(lái)使得結(jié)果加 1垫挨。而在加法中,求補(bǔ)電路將不起作用触菜,且輸入 CI 為 0九榔。

??加法器的 SUB 信號(hào)和 CO(進(jìn)位輸出)輸出作為異或門(mén)的輸入來(lái)控制表示上溢/下溢的燈泡。如果 SUB 信號(hào)為 0(表示進(jìn)行加法運(yùn)算)涡相,則當(dāng)加法器 CO 輸出為 1 時(shí)燈亮哲泊,意思是加法計(jì)算結(jié)果大于 255。

??當(dāng)進(jìn)行減法運(yùn)算的時(shí)候催蝗,如果減數(shù)(輸入 B)小于被減數(shù)(輸入 A)切威,這時(shí)加法器的 CO 輸出為 1。這表示減法的最后一步要減去 100000000丙号。也就是說(shuō)減數(shù)要大于被減數(shù)先朦,結(jié)果為負(fù)缰冤。上面所示器件現(xiàn)在還不能表示負(fù)數(shù)。因此喳魏,上溢/下溢指示燈僅在加法器的 CO 輸出為 0 時(shí)才會(huì)亮起棉浸。


3 小結(jié)

??編碼:實(shí)現(xiàn)減法篇對(duì)二進(jìn)制加法器部分進(jìn)行了拓展,討論了如何利用全加器實(shí)現(xiàn)了二進(jìn)制的減法操作截酷。為了精簡(jiǎn)內(nèi)容刪減了部分較為詳細(xì)的書(shū)寫(xiě)涮拗,僅作為整理總結(jié)乾戏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迂苛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鼓择,更是在濱河造成了極大的恐慌三幻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐能,死亡現(xiàn)場(chǎng)離奇詭異念搬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)摆出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)朗徊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人偎漫,你說(shuō)我怎么就攤上這事爷恳。” “怎么了象踊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵温亲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我杯矩,道長(zhǎng)栈虚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任史隆,我火速辦了婚禮魂务,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泌射。我一直安慰自己粘姜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布魄幕。 她就那樣靜靜地躺著相艇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纯陨。 梳的紋絲不亂的頭發(fā)上坛芽,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天留储,我揣著相機(jī)與錄音,去河邊找鬼咙轩。 笑死获讳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的活喊。 我是一名探鬼主播丐膝,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钾菊!你這毒婦竟也來(lái)了帅矗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤煞烫,失蹤者是張志新(化名)和其女友劉穎浑此,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體滞详,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凛俱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了料饥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒲犬。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖岸啡,靈堂內(nèi)的尸體忽然破棺而出原叮,到底是詐尸還是另有隱情,我是刑警寧澤凰狞,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布篇裁,位于F島的核電站,受9級(jí)特大地震影響赡若,放射性物質(zhì)發(fā)生泄漏达布。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一逾冬、第九天 我趴在偏房一處隱蔽的房頂上張望黍聂。 院中可真熱鬧,春花似錦身腻、人聲如沸产还。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脐区。三九已至,卻和暖如春她按,著一層夾襖步出監(jiān)牢的瞬間牛隅,已是汗流浹背炕柔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媒佣,地道東北人匕累。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像默伍,于是被迫代替她去往敵國(guó)和親欢嘿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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