4 利用邏輯門實現加法器和減法器

2021-09-19 12:40:14 字數 3894 閱讀 1447

首先給大家分享乙個巨牛巨牛的人工智慧教程,是我無意中發現的。教程不僅零基礎,通俗易懂,而且非常風趣幽默,還時不時有內涵段子,像看**一樣,哈哈~我正在學習中,覺得太牛了,所以分享給大家!點這裡可以跳轉到教程

了解了門,我們就可以做一些實際應用了,計算機的主要目的是計算,而門可以用於計算,所以可以說計算機是由各種不同的門組成。接下來我們要做的就是做乙個二進位制加法器,因為如果做出加法器,就可以擴充套件為減法,乘法,除法。而我們如何實現加法器呢?我們這次只使用一些很常見、並且有些落後的部件完成:開關、燈泡、導線、電池、門。

輸入為開關,輸出為一排燈泡,亮表示1,滅表示0。如果二進位制串進行加法,我們肯定會想到一位一位進行加法運算,因此如果有8位二進位制數,我們就要分8部運算。通過嘗試可以知道,只有當輸入為兩個1時,進製位才為1,因此符合與門特性,而當輸入為兩個1或兩個0時,加法位才會為0.這個符合異或特性。異或我們怎麼用最基本的邏輯門表示呢?我們可以通過兩個與非門,乙個或門構成。這樣就構成了乙個半加器。

稱為半加器的目的是因為我們沒有考慮低位的進製問題,如果考慮了,我們就稱為全加器。而全加器是由2個半加器和乙個或門組成。

接下來我們談談一共要用多少個繼電器:

進製位是與門,所以由2個繼電器組成。

加法位是乙個或門,乙個與非門,乙個與門組成,所以由6個繼電器。

半加器由進製位和加法位組成,則有8個繼電器。

全加器由兩個半加器和乙個或門組成,則有18個繼電器。

我們有了全加器,則可以通過級聯組成乙個二進位制串的加法。

但是現在計算機使用的是電晶體,所以需要將繼電器換成電晶體。

我們前面實現了加法器,如同我們所說,減法是加法的擴充套件,所以實現了加法器,只需要稍作修改,就能實現減法,而減法最煩人的就是借位,因此我們就想是否有方法能夠避免借位呢?

答案是有的,

(1)當被減數》減數時,設被減數為x,減數為y,假設x和y都是三位十進位制數,只需要將x-y=x+(999-y)+1-1000,這個式子看起來很普通,但是就能避免借位問題。因為999-y不可能發生借位,其他的步驟也不可能。

(2)當被減數《減數時,x-y=-(999-(x+(999-y))),這樣也能避免借位。

這裡我們實現的是二進位制的減法,所以類似於上面,

(1)當被減數》減數時,x-y=x+(111-y)+1-1000.

(2)當被減數《減數時,x-y=-(111-(x+(111-y))).

那麼知道了方法,利用加法器我們怎麼實現它呢?這裡我們只實現了第一種情況.

我們把x+(11...1-y)+1-100...0分解開來看,

(1)先是a=11...1-y,這個實際上就是求反,即通過前面所說的反相器。

(2)b=x+(111...1-y)+1,這個只需要前面的加法器即可。

(3)b-100...0這個只需要把最高位忽略掉即可。因為被減數》減數時,最高位肯定為1。

如果我們不能單獨做乙個減法器,而是把加法器和減法器合併,該怎麼做呢?

我們首先要有乙個開關,是加法和減法的選擇。如果是加法,則按照加法器方式做,如果是減法,則按減法器方式做。

我們設這個選擇為x,減法為1,加法為0.把這個位與輸入的每個位異或,如果是加法,則輸入和輸入不便,如果是減法,則輸入與輸出相反,即對2求補。這就實現了11...1-y的功能。

我們還要設最低進製y,如果是減法,則為1,如果是加法,則為0.這樣就解決了x+1+(11...1-y).

我們設最高位為z,如果是加法,輸出不變,如果是減法,則輸出變為0.我們需要用異或門。即實現了x+(111...1-y)+1-1000..0。

這樣我們就實現了減法器與加法器的合併。

接下來介紹幾個術語:

(1)設數為x,則999-x為10的補數,則111-x為2的補數。

我們又有乙個疑問,怎麼表示減法呢?

很多人都知道有原碼、反碼、補碼。

比如111在有符號數時表示的是-1.在無符號數表示的是+3.所以原本的二進位制是沒有任何含義的,只有給予他上下文,才會有含義。

我們還需要考慮的是有符號數相加時的溢位問題。如果比如011+010=101,原本的正數,變為了負數,因為他超出了補碼所能表示的範圍。

瀏覽人工智慧教程

了解了門,我們就可以做一些實際應用了,計算機的主要目的是計算,而門可以用於計算,所以可以說計算機是由各種不同的門組成。接下來我們要做的就是做乙個二進位制加法器,因為如果做出加法器,就可以擴充套件為減法,乘法,除法。而我們如何實現加法器呢?我們這次只使用一些很常見、並且有些落後的部件完成:開關、燈泡、導線、電池、門。

輸入為開關,輸出為一排燈泡,亮表示1,滅表示0。如果二進位制串進行加法,我們肯定會想到一位一位進行加法運算,因此如果有8位二進位制數,我們就要分8部運算。通過嘗試可以知道,只有當輸入為兩個1時,進製位才為1,因此符合與門特性,而當輸入為兩個1或兩個0時,加法位才會為0.這個符合異或特性。異或我們怎麼用最基本的邏輯門表示呢?我們可以通過兩個與非門,乙個或門構成。這樣就構成了乙個半加器。

稱為半加器的目的是因為我們沒有考慮低位的進製問題,如果考慮了,我們就稱為全加器。而全加器是由2個半加器和乙個或門組成。

接下來我們談談一共要用多少個繼電器:

進製位是與門,所以由2個繼電器組成。

加法位是乙個或門,乙個與非門,乙個與門組成,所以由6個繼電器。

半加器由進製位和加法位組成,則有8個繼電器。

全加器由兩個半加器和乙個或門組成,則有18個繼電器。

我們有了全加器,則可以通過級聯組成乙個二進位制串的加法。

但是現在計算機使用的是電晶體,所以需要將繼電器換成電晶體。

我們前面實現了加法器,如同我們所說,減法是加法的擴充套件,所以實現了加法器,只需要稍作修改,就能實現減法,而減法最煩人的就是借位,因此我們就想是否有方法能夠避免借位呢?

答案是有的,

(1)當被減數》減數時,設被減數為x,減數為y,假設x和y都是三位十進位制數,只需要將x-y=x+(999-y)+1-1000,這個式子看起來很普通,但是就能避免借位問題。因為999-y不可能發生借位,其他的步驟也不可能。

(2)當被減數《減數時,x-y=-(999-(x+(999-y))),這樣也能避免借位。

這裡我們實現的是二進位制的減法,所以類似於上面,

(1)當被減數》減數時,x-y=x+(111-y)+1-1000.

(2)當被減數《減數時,x-y=-(111-(x+(111-y))).

那麼知道了方法,利用加法器我們怎麼實現它呢?這裡我們只實現了第一種情況.

我們把x+(11...1-y)+1-100...0分解開來看,

(1)先是a=11...1-y,這個實際上就是求反,即通過前面所說的反相器。

(2)b=x+(111...1-y)+1,這個只需要前面的加法器即可。

(3)b-100...0這個只需要把最高位忽略掉即可。因為被減數》減數時,最高位肯定為1。

如果我們不能單獨做乙個減法器,而是把加法器和減法器合併,該怎麼做呢?

我們首先要有乙個開關,是加法和減法的選擇。如果是加法,則按照加法器方式做,如果是減法,則按減法器方式做。

我們設這個選擇為x,減法為1,加法為0.把這個位與輸入的每個位異或,如果是加法,則輸入和輸入不便,如果是減法,則輸入與輸出相反,即對2求補。這就實現了11...1-y的功能。

我們還要設最低進製y,如果是減法,則為1,如果是加法,則為0.這樣就解決了x+1+(11...1-y).

我們設最高位為z,如果是加法,輸出不變,如果是減法,則輸出變為0.我們需要用異或門。即實現了x+(111...1-y)+1-1000..0。

這樣我們就實現了減法器與加法器的合併。

接下來介紹幾個術語:

(1)設數為x,則999-x為10的補數,則111-x為2的補數。

我們又有乙個疑問,怎麼表示減法呢?

很多人都知道有原碼、反碼、補碼。

比如111在有符號數時表示的是-1.在無符號數表示的是+3.所以原本的二進位制是沒有任何含義的,只有給予他上下文,才會有含義。

我們還需要考慮的是有符號數相加時的溢位問題。如果比如011+010=101,原本的正數,變為了負數,因為他超出了補碼所能表示的範圍。

加法器的硬體實現

最基礎的加法器是半加器,它把兩個1位二進位制的運算元 x 和 y相加,得到乙個兩位和,用hs 表示和的較低位,進製輸出用co 表示,可以得到以下等式 hs x y co x y對於多於一位的二進位制加法,則必須要考慮進製的問題。s 行波加法器又叫做序列進製加法器,為 n 個全加器的級聯,但是這種加法...

Verilog 加法器和減法器 5

前面二進位制加法運算,我們並沒有提運算元是有符號數,還是無符號數。其實前面的二進位制加法對於有符號數和無符號數都成立。比如前面的8位二進位制加法運算,第一張圖我們選radix是unsigned,表示無符號加法,第二張圖我們選radix是decimal,表示有符號數,從圖中可知結果都是正確的。對於有符...

java SWT實現最簡單的加法器

練練手 從這裡學的 難點 怎樣把輸入字串轉換成double型 import org.eclipse.swt.swt public class test catch exception e open the window.public void open create contents of the ...