編碼 隱藏在計算機軟硬體背後的語言(四)減法實現

2021-08-14 03:43:14 字數 2772 閱讀 8924

減法器的實現依賴加法器,當兩個運算元進行減法運算時;如a-b=a+(-b)即可以將b的數進行取反與a相加,從而實現減法運算。

1)被減數-減數》0

例如:十進位制數:253-176=(999-176)+253+1-1000  

二進位制數:253-176=

1111 1101-1011 0000

第一步:求出176對9的補數c,也稱反碼或相反數; 

1111 1111 - 1011 0000 =   0100 1111

第二步:求補數c加上被減數253結果為s1;

0100 1111 + 1111 1101 =1 0100 1100

第三步:求s1加上1結果為s2;

1 0100 1100+ 0000 0001=1 0100 1101

第四步:s2減去1000為最終結果77。

1 0100 1101-10000 0000=   0100 1101=77

上述過程,避免了借位。

2)被減數-減數<0

例如:十進位制數:176-253=-(999-((999-253)+176))

二進位制數:176-253=1011 0000-1111 1101

第一步:求出253對9的補數c;

1111 1111-1111 1101=0000 0010

第二步:求補數c加上被減數176結果為s1;

1011 0000+0000 0010=1011 0010

第三步:求999減去s1結果為s2;

1111 1111 - 1011 0010 =0100 1101 =77

第四步:s2取反得到結果。

總結一下就是「減數求補,與被減速求和,結果加1,最高位減1」。

簡便起見,下文減法機只執行被減數大於減數的減法操作,

減法機面板如下:

如圖所示,sub與add開關是進行加減法按鈕,overflow與underflow是溢位位,表明結果大於255或出現負數時顯示。

減法器就是加法的逆運算如a-b=a+(-b),由表示式可以看出,我們需要將減數進行取反再與被減數進行加法器運算。

8位取反使用8個反向器即可,但考慮sub與add開關控制加減運算,需要在加法運算時,減數不需要取反。邏輯如下:

當add=0時處於加法器,不需要取反;sub=1時處於減法,對應的運算元需要取反。異或門滿足邏輯,電路如下:

封裝器件如下:

減法器整體電路如下:

注幾點說明

a.對於sub=1時,進行減法運算如253-176

需要將減數176取反,

再與被減數253相加,

ci相當於上式加1,

那最高位如何減1,當sub=1,co與sub異或結果,相當於最高位減去1.

b.sub=0時,進行加法運算:

加法時ci=0,

最高位無需變化。

看起來我們已經做出了乙個減法器,雖然它能解決一部分減法運算,但是對於負數它還是無能為力,所以接下來就有必要了解一下二進位制中負數的表示。

1)對於符號數,機器數常用的表示方法有原碼、反碼、補碼。數x的

原碼記[x]原,反碼記[x]反,補碼記[x]補。注意:對正數,三種表示方法均相同。他們的差別在於對負數的表示。

原碼:符號位:0表示正,1表示負;

數值位:真值的絕對值;

數0的原碼不唯一。

原碼對正數的加法可以正常運算,對於減法就不適用,故引入反碼。

例如:1-1=1+(-1)=[0000 0001]原+[1000 0001]原=-1

反碼:x>0,[x]原=[x]反;x<0,[x]反=對應原碼的符號位不變,數值位按位取反;注意:數0的反碼也不唯一。

反碼的引入解決減法問題。

例如:1-1=1+(-1)=[0000 0001]原+[1000 0001]原=[0000 0001]反+[1111 1110]反=[1111 1111]反=[1000 0000]原=-0;反碼解決減法結果,但未解決+0與-0問題,故引入補碼機制,

補碼:x>0,[x]補=[x]原=[x]反;x<0,[x]補=[x]反+1;計算機中有符號數都是以補碼形式儲存。

+0=0000 0000 

-0=[1000 0000]原=[1111 1111]反 =[1111 1111]反 +1 = 1 [0000 0000]補

故+0=-0。

八位二進位制表示範圍:

原碼:-127~+127

反碼:-127~+127

補碼:-128~+127

二進位制中對應的系統稱為2的補數。假設我們用8位二進位制數工作,範圍從00000000~11111111,對應於十進位制的0~255。這時如果你想要表達負數,則以1開頭的每個8位數都表示乙個負數,如下所示:

相反數就是所有位取反再加1

「模」實質上是計量器產生「溢位」的量,它的值在計量器上表示

讀《隱藏在計算機軟硬體背後的語言》記錄(1)

面對面交談 飛鴿傳書 烽火狼煙 八百里加急 在沒有無線電出現之前都是這樣的。直到1844年5月24日摩爾斯使用發報機在washington 和馬里蘭州巴爾摩之間成功傳送了一句 whathath godwrought 奠定了人類電報的通訊的基礎,發報機使用的就是摩爾斯電碼,摩爾斯電碼使用點和線和間隔的...

計算機神書 編碼 隱匿在計算機軟硬體背後的語言

在知乎回答了乙個關於書籍推薦的問題 有哪些短小精悍的好書推薦?如果只推薦一本計算機類的神書,那必然是 編碼 隱匿在計算機軟硬體背後的語言 渴望交流是大多數人的天性。在本書中,編碼 通常指一種在人和機器之間進行資訊轉換的系統。換句話說 編碼即是交流。有時我們將編碼看得很神秘,其實大多數編碼並非都是這樣...

計算機神書 編碼 隱匿在計算機軟硬體背後的語言

在知乎回答了乙個關於書籍推薦的問題 有哪些短小精悍的好書推薦?如果只推薦一本計算機類的神書,那必然是 編碼 隱匿在計算機軟硬體背後的語言 渴望交流是大多數人的天性。在本書中,編碼 通常指一種在人和機器之間進行資訊轉換的系統。換句話說 編碼即是交流。有時我們將編碼看得很神秘,其實大多數編碼並非都是這樣...