3、论二进制减法
根據(jù)上面的加法,我們覺(jué)得的確門邏輯能解決這種加法的進(jìn)位問(wèn)題。可是減法呢?
減法涉及到借位,并且還要判斷位數(shù)能不能借,不能借得向更高的位去借,這種邏輯貌似門實(shí)現(xiàn)起來(lái)復(fù)雜度相當(dāng)之高?其實(shí)不然
如何避免這種復(fù)雜的借位,最好的辦法,向最高位的再高一位借一位,那么就涉及不到那么多位的借位了。也就是說(shuō)8位,我們借第九位的一位。所以得到
253-176=77的情況下,我們可以借個(gè)1000,因?yàn)闇p1000只涉及到最高位的門邏輯,然后用999減去176,因?yàn)?99和176都是三位,用相同數(shù)量的門電路可以實(shí)現(xiàn)了,結(jié)果再加1.而176我們就叫做999的補(bǔ)數(shù)。
現(xiàn)在結(jié)果編程計(jì)算253+999-176+1-1000的情況。
但是如果是176-253呢?你可能會(huì)想到跟前面一樣,176+999-253+1-1000,但是923-1000導(dǎo)致了借位,這樣我們只操作最高位高一位的門邏輯是無(wú)法實(shí)現(xiàn)的。我們不如直接176+999-253-999,讓它們都用相同數(shù)據(jù)量級(jí)的門邏輯計(jì)算,不過(guò)922-999這一步我們把它變成999-922,然后再加個(gè)負(fù)符號(hào)。
現(xiàn)在我們演化成二進(jìn)制來(lái)看看。
253-176 變成二進(jìn)制位
1 1 1 1 1 1 0 1
-1 0 1 1 0 0 0 0
—————————
? ? ? ? ? ? ? ?
第一步、我們使用11111111(255)減去減數(shù):
1 1 1 1 1 1 1 1
-1 0 1 1 0 0 0 0
--------------------
0 1 0 0 1 1 1 1
這種計(jì)算對(duì)于門電路來(lái)說(shuō)很簡(jiǎn)單,只需要對(duì)減數(shù)求反,將0變成1,1變成0.
第二步、把被減數(shù)和剛才我們求得的對(duì)1的補(bǔ)數(shù)相加:
1 1 1 1 1 1 0 1
+0 1 0 0 1 1 1 1
-------------------
1 0 1 0 0 1 1 0 0
第三步、對(duì)上面結(jié)果+1
1 0 1 0 0 1 1 0 0
+ 1
-----------------------
1 0 1 0 0 1 1 0 1
第四步,減去100000000(256)
1 0 1 0 0 1 1 0 1
- 1 0 0 0 0 0 0 0 0
-----------------------
1 0 0 1 1 0 1
即等于77.
現(xiàn)在我們來(lái)算下176-253
二進(jìn)制表示為
1 0 1 1 0 0 0 0
- 1 1 1 1 1 1 0 1
--------------------
? ? ? ? ? ? ? ?
第一步,用11111111減去減數(shù),得到對(duì)1的補(bǔ)數(shù)
1 1 1 1 1 1 1 1
- 1 1 1 1 1 1 0 1
-------------------
0 0 0 0 0 0 1 0
第二步,將減數(shù)對(duì)1的補(bǔ)數(shù)與被減數(shù)相加:
1 0 1 1 0 0 0 0
+0 0 0 0 0 0 1 0
---------------------
1 0 1 1 0 0 1 0
第三步、用11111111減去結(jié)果
1 1 1 1 1 1 1 1
- 1 0 1 1 0 0 1 0
--------------------
0 1 0 0 1 1 0 1
結(jié)果是77,但是答案應(yīng)該是-77
現(xiàn)在我們可以來(lái)改造上面一章的加法器了,為了不過(guò)于復(fù)雜,我們先涉及減數(shù)小于被減數(shù)的操作。
上一章我們的加法器是這樣的:
我們得增設(shè)一個(gè)標(biāo)識(shí),來(lái)表明它是一個(gè)加法還是減法。我們的目的是做一個(gè)既能做加法,也能做減法的邏輯器。
首先我們得對(duì)B進(jìn)行取反,且僅當(dāng)減法的時(shí)候進(jìn)行取反,這樣就不會(huì)影響到加法,
我們首先想下異或門的工作方式:
| XOR | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 1 | 0 |
改造圖如下:
取反就是我們的加法減法標(biāo)識(shí),我們定義標(biāo)識(shí)為0時(shí)是加法,1是減法。當(dāng)0加法的時(shí)候,輸入和輸出是不變的,如果是1減法的時(shí)候,那么正好是一個(gè)取反的狀態(tài)。
我們將8個(gè)異或門組成的器件,稱為求補(bǔ)器:
現(xiàn)在我們組合的連接如下:
SUB就是我們的加法減法的標(biāo)識(shí)位,0加法,1減法。在B輸入的時(shí)候,我們進(jìn)行減法求反,達(dá)到被11111111減去的效果,通過(guò)最右邊的SUB來(lái)達(dá)到對(duì)減法結(jié)果加1的效果,對(duì)加法沒(méi)影響。通過(guò)最左邊的異或門和sub來(lái)達(dá)到上溢(大于255)/下溢(負(fù)數(shù))的結(jié)果,SUB為0加法的時(shí)候,對(duì)輸出沒(méi)影響,CO為1代表大于255。當(dāng)減法的時(shí)候,SBU為1,CO輸出1,這個(gè)門邏輯組合就會(huì)得到0,達(dá)到減去100000000的效果,如果CO輸出0,代表了負(fù)數(shù)(如5-8=9+1-10+5-8=9-8+5+1-10=6-10,被減數(shù)只要小于減數(shù),最后推算的這個(gè)被減數(shù)6是無(wú)論如何十位是不可能得到1的)經(jīng)過(guò)這個(gè)門邏輯組合就會(huì)得到1,所以這個(gè)1就是下溢(負(fù)號(hào))的標(biāo)識(shí)。
現(xiàn)在我們的減法器是做好了,那么接下來(lái)我們討論下這個(gè)負(fù)數(shù)如何在我們的二進(jìn)制里面表示呢?
我們平常使用的系統(tǒng)都是在一定范圍內(nèi)的數(shù)字,所以我們不用求無(wú)限大的數(shù)值表示。
比如我們現(xiàn)在需要表示-500到499之間的數(shù)。我們都要用正數(shù)表示,因?yàn)槲覀兌M(jìn)制系統(tǒng)不支持-這個(gè)符號(hào)。我們就用三位數(shù)來(lái)表示這些數(shù)字。
500表示-500,501表示-499......999表示-1,000表示0,001表示1......499表示499
這樣我們就形成了一個(gè)循環(huán),好處是我們-1+1=0的情況用正數(shù)來(lái)表示999+1=1000,1由于是第四位,會(huì)被舍棄,就會(huì)得到結(jié)果0,
這種標(biāo)記的方法稱為10的補(bǔ)數(shù)。
如果你有一個(gè)余額為143塊的賬戶,你用了78元。-78對(duì)10的補(bǔ)數(shù)是999-078+1=65(忽略溢出)。如果我們用超額的用了150塊,-150對(duì)10的補(bǔ)數(shù)是850,就等于915,就是新賬戶的余額,在我們的表示中就是-85塊。
總結(jié)
- 上一篇: 路由器的好坏要怎么分辨出门如何辨别路由器
- 下一篇: 华为荣耀路由有线连接路由器怎样设置华为路