在什么情况下,1+1不等于2?这个问题有正经回答:布尔代数
在什么情况下,1+1不等于2?
我先声明一下,这不是脑筋急转弯,而是正经数学:布尔代数。
1+1=1
这就是布尔代数(逻辑代数),我刻意使用了“1+1”,而不是“一加一”,就是因为这里的“+”并不是算数运算,而是逻辑运算。
一些读者可能会觉得这比脑筋急转弯还要贱,不过这真的是正经数学。
手机前的你,能用上手机,还多亏了布尔代数。一切程序代码、硬件电路的底层逻辑都是0和1,而0和1的底层逻辑就是:布尔代数。
可以说:计算机,建立在布尔代数之上。不管多么高端的芯片,都只是在执行布尔代数。
布尔代数,是英国数学家乔治·布尔(G.Boole)在19世纪中期提出的理论。
乔治·布尔无论如何都想不到,他发明的这门数学,直接给20世纪的计算机科学铺平了道路(顺便也成了一部分大学生的噩梦)。
布尔代数本身还是很复杂的,只不过人们通常提到的布尔代数都是:关于0和1的代数。
就像学常见的“代数”之前,需要先学“算数”一样。在正式介绍“布尔代数”之前,必须先介绍“布尔算数”,也就是关于逻辑的算数。
通常的算数,使用的数字是:0、1、2、3、4、5、6、7、8、9。
逻辑算数,使用的数字只有:0、1。
布尔代数中的0和1,是在表示“真”和“假”,把逻辑关系变成数学运算。
通常的算数,经常使用的运算有:加、减、乘、除。
逻辑算数,经常使用的运算有:与、或、非。
在文章开头提到的“+”,表达的运算就是“或”。典型例子就是“连代责任”:只要有一个人犯错,所有人都受罚,这就是“或”的思想。
当然,表示“或”的符号不只有“+”,本文采用了数字电子技术中的表示方法。
“与”、“或”、“非”,其实都可以用“连代责任”来理解。
假设只有两个人,“连代责任”可以理解成:只要有一个人犯错,两个人都要受罚,这就是“或”的思想。
如果:
1表示单个人犯错,0表示单个人不犯错。
1表示受罚,0表示不受罚。
只要有一个人犯错,两个人都要受罚,用逻辑算数表示就是:
1+1=11+0=00+1=00+0=0如果用逻辑代数表示上面的式子,可以用A、B分别表示单个人是否犯错,用C表示是否受罚,只需要一个式子:
A+B=C
只有当A=B=0的时候,C=0,两个人都不用受罚。
还可以画成“真值表”:
A
B
A+B
0
0
0
0
1
1
1
0
1
1
1
1
假设只有两个人,“连代责任”还可以理解成:两个人都不犯错,才能不受罚,这就是“与”的思想。
如果:
1表示单个人不犯错,0表示单个人犯错。
1表示不受罚,0表示受罚。
两个人都不犯错,才能不受罚,用逻辑算数表示就是:
1·1=1
1·0=0
0·1=0
0·0=0
如果用逻辑代数表示上面的式子,可以用A、B分别表示单个人是否犯错,用C表示是否受罚,只需要一个式子:
A·B=C
也可以省略“·”,写成:
AB=C
只有当A=B=1的时候,C=1。
还可以画成“真值表”:
A
B
AB
0
0
0
0
1
0
1
0
0
1
1
1
这就更简单了。
犯错的“非”,就是:不犯错。
不犯错的“非”,就是:犯错。
还有:
受罚的“非”,就是:不受罚。
不受罚的“非”,就是:受罚。
用逻辑算数表示“非”就是:
1‘=0
0’=1
也可以使用代数的思想,画成“真值表”:
A
A'
0
1
1
0
通常的算数,只学会“加减乘除”还不够,还需要知道运算定律,比如:加法交换律、加法结合律、……
布尔代数也是如此,可以认为有四种运算定律:
交换律
结合律
反演律
分配律
布尔代数默认先进行“非”运算,再进行“与”运算,最后进行“或”运算。有括号的时候,先算括号里面的式子。
交换律:
A+B=B+A
AB=BA
结合律:
(A+B)+C=A+(B+C)
(AB)C=A(CB)
反演律:
(A')'=A
分配律:
A(B+C)=AB+AC
(A+B)'=(A')(B')=A'B'
(AB)'=(A')+(B')=A'+B'
上面的很多公式都和通常的算数运算定律一样,这也是用“+”表示“或,用“·”表示“与”的原因。
上面的公式中的:
(A+B)'=A'B'
(AB)'=A'+B'
也被称为“摩根律”,和通常的算数中的分配律不一样,不过也可以用“连代责任”直观理解。
“连代责任”有两种理解方式:
只要有一个人犯错,两个人都要受罚,这是“或”的思想。
两个人都不犯错,才能不受罚,这是“与”的思想。
这两种思想之间就差一个“非”运算,这就是“摩根律”的直观表现(有兴趣的读者可以多考虑一下其中的细节)。
上文冷不防提了一句:布尔代数也成了一部分大学生的噩梦。
看到现在,一些读者可能也不觉得布尔代数有难度,怎么就成了一部分大学生的噩梦?
如果你真有上面那种想法,那是因为我之前没有展示布尔代数的各种混合运算:
A+B=A+A'B
AB=A(A'+B)
A+AB=A
((AA)'(AA)')'=A
((A+A)'+(A+A)')'=A
温馨提示:布尔代数中的具体数字只能取0和1。
上面提到的那些混合运算,仅仅只是对布尔代数的表达式进行化简的基础知识。
学数字电子技术的时候,就经常会遇到这种问题:
Y=A'B'C+ABC+B'+C'
把上面式子化简成不含有“或”运算的形式,结果是这个样子:
Y==(BC(ABC)'(A'B'C)')'
当然,这种题在数字电子技术中,只是很平常的问题,并不算有难度。数字电子技术也因此成了一部分大学生的噩梦。
后台-插件-广告管理-内容页尾部广告(手机) |
声明:部分图文来源于网络,版权归原作者所有,侵权请联系删除:wzwt58@qq.com。本站发布此信息目的在于传播更多信息,与本网站立场无关,不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。本文地址:https://www.quqiwen.com/kxts/24915.html
相关文章