32位算术逻辑运算单元alu设计_逻辑运算定律

v2-2ed39ab6fec9ccd95c8c6306906f6472_1440w.jpg?source=172ae18b

大家好,上次给大家科普过计算机的基础知识——逻辑运算:

程序员鼓励师:计算机科学入门-逻辑运算​zhuanlan.zhihu.com
v2-7377cb1123b03834a31613a075bb99f8_180x120.jpg

我们知道了逻辑运算包括基本运算:逻辑与逻辑或逻辑非,还有一个不那么基本,但却比较常用的运算逻辑异或

大家如果还记得小学学过的四则运算的话,应该知道四则算术运算是有一些运算定律的,

比如加法交换律

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)的真值表:

v2-2bc1bcad1ae8348a9784f56d2ad48e2d_b.jpg

再看看(B∧A)的真值表:

v2-2243be77205cfd4e490433ffb4ddc8af_b.jpg

发现它们的结果一模一样,所以我们有逻辑与交换律

A∧B=B∧A

同样的,我们也有逻辑或交换律

A∨B=B∨A

以及逻辑异或交换律:

A⊕B=B⊕A

它们统称为逻辑运算交换律

然后我们再看看A∧(B∧C)的真值表:

v2-162b68b602f6954b51f420342f45e9a4_b.jpg

再看看A∧B∧C的真值表:

v2-87bf978cc8f7d439402d3a4093da079d_b.jpg

可以看出A∧(B∧C)=A∧B∧C

同样的,也有A∨(B∨C)=A∨B∨C

以及A⊕(B⊕C)=A⊕B⊕C

以上称为逻辑运算结合律

然后再看看逻辑与对逻辑或是否满足分配率:

v2-b074a0c3f86b647549cd9eee146ee1a4_b.jpg

果然有(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为例:

v2-58240c76a7f26258b76dcdebfa67df06_b.jpg

通过真值表可以看出,确实有¬(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的基础部件,现在已经不需要再重新设计实现,但是与全加器相关的计算机科学知识还是需要传承下去。

好了,今天就介绍这些,我们下次再见!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值