32位算術邏輯運算單元alu設計 邏輯運算定律

2021-10-11 04:25:54 字數 3306 閱讀 6840

程式設計師鼓勵師:電腦科學入門-邏輯運算​zhuanlan.zhihu.com

我們知道了邏輯運算包括基本運算:邏輯與邏輯或邏輯非,還有乙個不那麼基本,但卻比較常用的運算邏輯異或

大家如果還記得小學學過的四則運算的話,應該知道四則算術運算是有一些運算定律的,

比如加法交換律

a+b=b+a

加法結合律

a+(b+c)=a+b+c

乘法交換律

a*b=b*a

乘法結合律

a*(b*c)=a*b*c

乘法對加法的分配律

(a+b)*c=a*c+b*c

邏輯運算跟算術運算類似,也有不少運算定律,我們先來看看交換律。

先看看邏輯與運算(a∧b)的真值表:

再看看(b∧a)的真值表:

發現它們的結果一模一樣,所以我們有邏輯與交換律

a∧b=b∧a

同樣的,我們也有邏輯或交換律

a∨b=b∨a

以及邏輯異或交換律:

a⊕b=b⊕a

它們統稱為邏輯運算交換律

然後我們再看看a∧(b∧c)的真值表:

再看看a∧b∧c的真值表:

可以看出a∧(b∧c)=a∧b∧c

同樣的,也有a∨(b∨c)=a∨b∨c

以及a⊕(b⊕c)=a⊕b⊕c

以上稱為邏輯運算結合律

然後再看看邏輯與對邏輯或是否滿足分配率:

果然有(a∨b)∧c=(a∧c)∨(b∧c)

同樣的,也有:a∨(b∧c)=(a∨b)∧(a∨c)

以上稱為邏輯運算分配律

類似的,通過真值表對比,我們還可以得出邏輯運算吸收律

a∨(a∧b)=a,a∧(a∨b)=a,a∨(¬a∧b)=a∨b,a∧(¬a∨b)=a∧b

其實吸收律不需要真值表也能推導出來,比如a∨(a∧b),在b=1時

a∨(a∧b)=a∨(a∧1)=a∨a=a(通過基本邏輯運算真值表就能得出a∧1=a和a∨a=a)

然後在b=0時有:

a∨(a∧b)=a∨(a∧0)=a∨0=a(通過基本邏輯運算真值表就能得出a∧0=0和a∨0=a)

因為b的取值只能是1或者0,所以始終有a∨(a∧b)=a

其餘幾個吸收律公式也可以用類似的方法推導出來。

此外邏輯運算還滿足反演律

¬(a∧b)=¬a∨¬b,¬(a∨b)=¬a∧¬b

反演律同樣可以通過真值表推導出來,以¬(a∧b)=¬a∨¬b為例:

通過真值表可以看出,確實有¬(a∧b)=¬a∨¬b

利用這些運算定律,我們可以對複雜的邏輯運算表示式進行化簡,例如下面這個表示式:

((¬c)∧(¬a)∧b)∨((¬c)∧a∧(¬b))∨(c∧(¬a)∧(¬b))∨(c∧a∧b)

這個表示式非常複雜,我們先觀察它的結構,發現它由四部分組成:

① ((¬c)∧(¬a)∧b)

② ((¬c)∧a∧(¬b))

③ (c∧(¬a)∧(¬b))

④ (c∧a∧b)

這四個部分通過邏輯或(∨)連線在一起。通過優先順序分析,我們可以先把多餘的括號去掉,變成:

① (¬c∧¬a∧b)

② (¬c∧a∧¬b)

③ (c∧¬a∧¬b)

④ (c∧a∧b)

因此原表示式化簡為:

(¬c∧¬a∧b)∨(¬c∧a∧¬b)∨(c∧¬a∧¬b)∨(c∧a∧b)

進一步觀察發現①和②都包含¬c,③和④都包含c,先用一次分配律,把¬c和c提取出來:

¬c∧((¬a∧b)∨(a∧¬b))∨(c∧((¬a∧¬b)∨(a∧b)))

這個表示式可以再分為兩個部分:

(一)¬c∧((¬a∧b)∨(a∧¬b))

(二)c∧((¬a∧¬b)∨(a∧b))

先看第(一)部分,結合之前學過的邏輯異或的公式a⊕b = (¬a∧b)∨(¬b∧a)

可以得出(¬a∧b)∨(a∧¬b)=a⊕b

所以第(一)部分可以化簡為:¬c∧(a⊕b)

再看第(二)部分,保持c不變,將(¬a∧¬b)∨(a∧b)中的(¬a∧¬b)看做乙個整體,應用一次分配律變為((¬a∧¬b)∨a)∧((¬a∧¬b)∨b)

前半部分應用吸收律a∨(¬a∧b)=a∨b,以及交換律,有(¬a∧¬b)∨a=¬b∨a

後半部分應用吸收律以及交換律,有(¬a∧¬b)∨b=¬a∨b

所以有(¬a∧¬b)∨(a∧b)=(¬b∨a)∧(¬a∨b)

再對(¬b∨a)∧(¬a∨b)應用反演律(¬(a∨b)=¬a∧¬b),可以變為¬(¬(¬b∨a)∨¬(¬a∨b))

然後對¬(¬b∨a)和¬(¬a∨b)分別應用反演律,可以變為:¬((b∧¬a)∨(a∧¬b))

根據邏輯異或公式,有¬((b∧¬a)∨(a∧¬b))=¬(a⊕b)

所以第(二)部分可以變為c∧¬(a⊕b)

因此原來的整個表示式可以化簡為(¬c∧(a⊕b))∨(c∧¬(a⊕b))

最後把a⊕b看做乙個整體,再次應用異或公式,可以得出

(¬c∧(a⊕b))∨(c∧¬(a⊕b))=c⊕(a⊕b)=c⊕a⊕b

所以最初的表示式化簡後的最終結果是c⊕a⊕b

邏輯運算定律對真值表反推邏輯表示式非常有用。當然在真實的數位電路設計中,已經沒人會真的再去根據真值表來反推邏輯表示式,這些工作都由計算機軟體來完成了。包括邏輯表示式的化簡,也可以由計算機軟體自動完成。雖然實際工作中已經用不上邏輯表示式化簡這種技能了,但是了解邏輯運算定律,以及定律如何應用,對於理解計算機系統組成和數位電路的工作原理還是很有意義的。比如cpu核心單元「全加器」的設計實現,就需要經歷真值表反推邏輯表示式再化簡的這個過程。雖然全加器作為cpu的基礎部件,現在已經不需要再重新設計實現,但是與全加器相關的電腦科學知識還是需要傳承下去。

好了,今天就介紹這些,我們下次再見!

邏輯運算 位運算

今天有人問我,邏輯運算是什麼,現在來解釋一下 邏輯運算就是相當於資訊競賽基礎工具中的一位的位運算 符號對應關係 wedge cap 交 and 與運算 vee cup 並 or 或運算 neg not 非 xor 異或運算 x k 將x的二進位制右移k位 如 x 10110 2 時,k 1,那麼x ...

邏輯位運算與邏輯運算

兩者非常容易混淆,其實這是截然不同的兩種運算.1.邏輯位運算 與運算 1 2 0 0000 0001 0000 0010 0000 0000 0 或運算 1 2 3 0000 0001 0000 0010 0000 0011 3 按位求反 運算,異或 運算略.移位 左移,右移 運算略.2.邏輯運算 ...

C 邏輯運算 位運算

c gossip 邏輯運算 位運算 一 邏輯運算 在邏輯上有所謂的 且 或 與 反 運算,在c 中也提供這幾個基本邏輯運算所需的 邏輯運算子 logical operator 分別為 且 或 及 反相 三個運算子。來看看下面這個程式會輸出什麼?int num 75 cout num 70 num 8...