Loading... ## 基础布尔表示 | 中文名 | 英文名 | 布尔表示 | 编程语言表示 | | -------- | -------- | ------------------------------- | -------------- | | 真 | True | 1 | true | | 假 | False | 0 | flase | | 与 | And | `x And y`表示为 `x·y`或 `xy` | `&&` | | 或 | Or | `x Or y`表示为 `x+y` | ` | | 非 | Not | `Not x`表示为$\bar{x}$ | `!` | ## 基础布尔运算 **此处将所有运算用类似函数的形式表示** And运算:只有当两者均为真时才为真 | $a$ | $b$ | $And(a,b)$ | | ----- | ----- | :----------: | | T | T | T | | T | F | F | | F | T | F | | F | F | F | Or运算:只要两者间有一个为真,即为真 | $a$ | $b$ | $Or(a,b)$ | | ----- | ----- | :---------: | | T | T | T | | T | F | T | | F | T | T | | F | F | F | Not运算:将T变为F,F变为T | $a$ | $Not(a)$ | | ----- | :--------: | | T | F | | F | T | **运算顺序:** 布尔运算存在优先级,使用函数表示时按照从内到外依次计算 如果直接使用文本进行布尔表示,则运算优先级:Not>And>Or,即,同一级运算中,优先运算Not,最后运算Or。可以通过括号修改运算顺序 例如:`Not (Not a Or b And c )`其实际运算顺序是:`Not(Or(Not(a),And(b,c)))` **常用定理:** * `Or(a,F)=a` `And(a,T)=a` * `Or(a,T)=T` `And(a,F)=F` * `Or(a,a)=a` `And(a,a)=a` * `Not(Not(a))=a` * `And(a,b)=And(b,a)` `Or(a,b)=Or(b,a)` ## 德·摩根定律(De Morgan's laws) 德·摩根定律揭示了And、Or、Not之间的关系,简单来说,可以表示为 `And(a,b)=Not(Or(Not(a),Not(b)))`,通过真值表进行证明: | $a$ | $b$ | $Not(a)$ | $Not(b)$ | $Or(Not(a),Not(b))$ | $Not(Or(Not(a),Not(b)))$ | $And(a,b)$ | | :---: | :---: | :--------: | :--------: | :-------------------: | :------------------------: | :----------: | | T | T | F | F | F | T | T | | T | F | F | T | T | F | F | | F | T | T | F | T | F | F | | F | F | T | T | T | F | F | 如果我们令 `x=Not(a),y=Not(b)`,代入上面的式子 可以得到 `And(Not(x),Not(y))=Not(Or(x,y))` 两边同时取Not 可以得到 `Not(And(Not(x),Not(y)))=Or(x,y)` 因此,`Or(a,b)=Not(And(Not(a),Not(b)))` ## 逻辑门 ### 什么是逻辑门 我们身边的每一个电子设备,电脑也好,手机也罢,其实都基于一个用于处理信息、存储数据的芯片(CHIP)。这些芯片可大可小,也可能由不同材质构成,但是他们都是通过一些很小的电子组件物理连接链接在一起,接收并输出特定的电信号,这些电气组件被称为逻辑门(logic gate)。多个执行特定逻辑的逻辑门可以通过组合形成新的执行不同逻辑的逻辑门,通过不停地组合、构建最终构成我们熟知的计算机系统。 在逻辑门中,使用1/0来表示不同的电平,1为高电平,亦可表示真(True),0为低电平,亦可表示假(False)。每个逻辑门都应有输入与输出,现实中,逻辑门之间通过引脚来相互连接,每个引脚都必须被链接。在设计过程中为了方便表示,我们规定基础逻辑门的样式如下: ![Snipaste_2024-12-15_21-55-35.png](https://blog.ivan-hanloth.cn/usr/uploads/2024/12/1278441364.png) 事实上,所有的“基础”逻辑门(And、Or、Not)都可以由一个逻辑门表示,即 `Nand`(Not-And),布尔表示为 `Not(And(x))`,这是一个非常重要的发现,这意味着只需要能够物理上实现Nand逻辑门,则可以使用其表示任何的布尔逻辑。 **此教程(包括Nand2Tetris相关书籍)中,“芯片(CHIP)”与“逻辑门(Logic Gate)”是近似概念,通常会混用。或者可以认为“逻辑门”是比较小的逻辑运算单位,而“芯片”是较大的逻辑运算单位,但是本质并没有区别** ### 使用Nand表示基础逻辑门 我们可以将Nand视为一个函数,其接收两个参数a和b,返回一个值 Nand为Not-And,其输入输出如下: | $a$ | $b$ | $Nand(a,b)$ | | ----- | ----- | ------------- | | T | T | F | | T | F | T | | F | T | T | | F | F | T | 通过观察可以发现,当Nand的两个输入相同时(第一行和最后一行),输出的是与输入相反的值,与Not的逻辑相同,由此我们可以得到Not的表示方法为: ``` Nand(a,a) ``` 而Nand其实是 `Not(And())`,可以很容易的得到 `And(a,b)=Not(Nand(a,b))`,将其中的Not替换为Nand,我们能够得到And其实可以表示为: ``` Nand(Nand(a,b),Nand(a,b)) ``` 而根据德·摩根定理,我们可以得知 ``Or(a,b)=Not(And(Not(a),Not(b)))``,将Not与And替换为Nand,我们能够得到Or可以表示为: ``` Nand(//表示Not Nand(Nand(//表示And Nand(a,a),//表示Not Nand(b,b) ),Nand( Nand(a,a), Nand(b,b) ), Nand(Nand( Nand(a,a), Nand(b,b) ),Nand( Nand(a,a), Nand(b,b) ), ) ``` Last modification:December 16, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 1 如果觉得我的文章对你有用,请随意赞赏