如何寫二進位制乘法 如何實現加法器?

2021-10-15 00:13:02 字數 2453 閱讀 3930

最近看了一本書《編碼》,如何從頭開始構建一台計算機。從最基礎的莫爾斯編碼到二進位制,基礎電路和布林邏輯運算的神奇結合。產生了目前人類最偉大的發明-計算機。

二進位制的提出者是德國數學家萊布尼茨,他和牛頓發現了高等數學中的微積分。用二進位制記數只需要用到0和1兩個符號,逢二進一。我們一般習慣了十進位制,用0-9十個符號來表示數,逢十進一。二進位制和十進位制記數原理相同,僅僅是符號用的少。

下面是二進位制和十進位制0-10的對照表。

十進位制二進位制00

11210

3114100

5101

6110

7111

81000

91001

101010

所有男人都必有一死;蘇格拉底是男人;因此,蘇格拉底會死。

類似代數,布林運算符號為:and、or、not。在計算機中的邏輯運算中也叫與、或、非。運算元不是一般的數字,而是集合。

邏輯運算且滿足一般代數運算的交換率、結合率和分配率。

and

and01

0001

01or

or01

0011

11not

not01

10三種最基本的門

輸入輸入輸出0

0001

0100

111----

----

----

----or0

0001

1101

111------

------

------

------

not011

0或非門(nor)

與非門(nand)

輸入輸入輸出0

0101

0100

110------

------

------

------

nand00

1011

1011

10

摩根定律('+'為or,''為and)

只要造出了加法器,就可以通過加法得到減法、乘法和除法;再進行冪運算,解方程.......

在數**算裡,

0加0等於0;

0加1等於1;

1加0等於1;

1加1等於0,進製為1。

注意到,我們的運算結果和上面的幾個邏輯門中的都不滿足,但是見證奇蹟的時刻到了。我們可以把計算的結果分為兩部分,一部分為加法結果,一部分為進製。然後再把進製結果進行二次相加,以此反覆,最終就可以得到結果。

只要我們的邏輯門足夠多,就可以計算任意大的數。這裡我採用的是8位的二進位制數,兩個八位的進製數和最大為11111111+11111111=111111110,在十進位制裡為510。也就是說可以計算510以內的任意加法(整數)。

當我們把乙個或門、乙個非門和與非門連線起來,得到異或門

輸入輸入輸出0

0001

1101

110 通過異或門,可以得到加和輸出,進製輸出直接通過與門就可以得到。

為了看起來簡單一點,把異或門表示為如下

當我們把乙個異或門和與門連線起來,就可以計算一位的二進位制數。

乙個加法器的輸入輸出:

輸入a輸入b

進製輸入

加和輸出

進製輸出00

0000

1010

1001

0110

0100

1100

1101

1010

1111

11把八個全加器連線起來,就得到了乙個加器。

二進位制加法運算

兩個二進位制整數相加時,是位對位處理的,從最低的一對位 右邊 開始,依序將每一對位進行加法運算。兩個二進位制數字相加,有四種結果,如下所示 0 0 0 0 1 1 1 0 1 1 1 10 1 與 1 相加的結果是二進位制的 10 等於十進位制的 2 多出來的數字向更高位產生乙個進製。如下圖所示,兩...

二進位制加法運算

兩個二進位制整數相加時,是位對位處理的,從最低的一對位 右邊 開始,依序將每一對位進行加法運算。兩個二進位制數字相加,有四種結果,如下所示 0 0 0 0 1 1 1 0 1 1 1 10 1 與 1 相加的結果是二進位制的 10 等於十進位制的 2 多出來的數字向更高位產生乙個進製。如下圖所示,兩...

php 實現二進位制加法運算

php實現二進位制加法 思路 沒有工作中應用過此場景,但十進位制的加法還是經常做的,能不能用十進位制加法變相實現呢?答案是可以的,並且php也提供進製間轉換的函式,我的實現使用了 bindec 二進位制轉十進位制 decbin 十進位制轉二進位制 function binplus arg1,arg2...