|
马上注册,结交更多侠客,享用更多功能,让你轻松玩转侠外论坛。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
逻辑电路(对位运算与逻辑电路统一性的浅显理解入门),今天达达兔游戏网给大家整理了详细的逻辑电路(对位运算与逻辑电路统一性的浅显理解入门)介绍,希望这篇文章对你有参考价值,我们一起关注一下逻辑电路(对位运算与逻辑电路统一性的浅显理解入门)。
前言
(题目我大概是随便编的,感觉叫这个比较能概括我总结的主题)
在学OI的过程中,我一开始完全不懂位运算,后来经过一些题目的记忆,也是能够记下来算术运算符它们的效果和作用,但是总是忘记每个运算符具体的效果,比如或运算与运算之类。
今天无意间翻开物理书,看到逻辑电路那一节,里面的与,或不就是算术位运算的效果吗?我突然感到自己是个弱智,先前都是在死记硬背数学课讲逻辑的时候也有与和或,当时没有联想到按位运算,只是想到了对于条件且&&和条件||的类比
(我死记硬背的方法——在便笺里放着小口诀)
于是我打算改变我憨批一般的死记硬背,从更基本的逻辑电路出发来记忆和理解各个位运算的效果。
将数学语言上的逻辑,计算机上的逻辑程序语言,电路上的逻辑其实也是计算机底层的逻辑吧统一起来,让自己更清晰。
而众所周知,计算机位运算中有 “与” “或”“非”“异或”四种算术位运算,下面将分别分析和统一它们。
##事先备注,下文的表述中在数学上只是逻辑语言,用于一种描述或进行推论;而表现在计算机中,这些逻辑运用都是二进制下按位运算,也就是对二进制数的每一位都进行这样的逻辑运算;物理上就是逻辑门的关系,当然还存在“与非”“或非”等等,本文只讲述与c++位运算有关内容,这些并无直接对应,但可以通过组合实现。它们只是在逻辑上统一,具有相同的逻辑关系,并非含义等同。
基本介绍符号:
数学:∧ (这个不是^(次方或者异或符号),是逻辑与)
计算机c++(其实是按位与 : and & (整条语句为“&&”)
具体描述 :
都为真才为真 ,或者说 输入都为1true 才输出 1true ,再或者说 条件都为1true 结论才为1true。
对于c++来说,使用第二条来记录比较具象就是我便笺上写的。
物理上的逻辑开关串联:
我们规定开关关闭断路则表示条件逻辑再者说输入为0假,开关开启通路则表示条件逻辑再者说输入为1真,
两者都为1的时候,两者都为00&0,灯泡的状态为不亮,即表现为0假;同时,开关一开一关0&1,
显然灯泡也不会亮,即表现为0假;只有二者均为11&1的时候,灯泡才会亮,即表现为1真;
运算表达式:
数学其实数学这里“与”其实是“逻辑且逻辑与”吧,对应在程序里是&&而不是按位与的&,但它们在逻辑上是并通的:
如果条件p为假,条件q为假,那么 p∧q=假;
如果条件 p为真,q为假或者p为假,q为真 ,那么p∧q=假;
如果p,q都为真逻辑电路,那么p∧q=真
抽象点有定义,乘法为与,"+"表逻辑或,条件加“'”为非:
F=AB AB都为1,F才为1
计算机二进制按位运算:
0&0=0;1&0=0;0&1=0;1&1=1;
物理:这咋表达?这个只能用图
逻辑上的统一就是:都为真才得到真(这不还是那句话?——但是我们多了个物理含义!是不是更好记了?)
符号:
数学: ∨
计算机c++:or | (对于整条语句来说是“||”)
具体描述:
只要有一个为真就是真,都为假时才是假;或者说输入有一个为1true就是1true,都为0false才是假;
再或者说,条件有一个为1true结论就为1true,条件均为0false结论才为0false。
对于c++来说,仍然是第二条。
物理上的逻辑开关并联:
同样的,开关通路开则表示1逻辑电路,断路关则表示0。如图
两者都为1开的时候1|1,则为1,任意一者为11|0的时候也为1,即这两种情况灯是亮的;
而只有两者都为00|0的时候才为0,即灯是不亮的;
运算表达式:
数学同逻辑与,数学的含义实际类似于“||”:
如果条件p,q至少有一个为真,则p∨q=真。
如果条件都为假,则p∨q=假。
抽象点有定义,乘法为与,"+"表逻辑或,条件加“'”为非:
F=A+B AB只要有一个为1,F就不为0
计算机二进制按位运算:
1|1=1;0|1=1;1|0=1;0|0=0;
物理:并联开关一个为开则干路上的灯为亮,都关了才不亮。
逻辑上的统一就是:都为假才是假
符号:
数学: ¬
计算机c++:~ 对于整条语句来说是“!”,不过在c++的条件语句里,二者都可以作用于一个判断语句的真假,但对数字按位取反要用~
具体描述:
是真则为假,是假则为真。输入为输出相反。条件与结论相反。
c++同样为第二条。
物理上的逻辑开关串联,与灯泡并联:
同上,很显然的就是,开关打开通路时灯泡不亮被短路了 !1,即为0,开关关闭断路时灯泡亮!0,即为1。
运算表达式:
数学: 若p为真,则¬p为假
若p为假,则¬p为真
抽象点有定义,乘法为与,"+"表逻辑或,条件加“'”为非:
F=A'
计算机二进制按位运算:这个比较特殊,因为如果要按位非的话,也就是按位取反
由于计算机内一个数字变量类型的最高为比如int的第32位符号位,按位取反则对从32到1所有取反
所以说~1=-2,~0=-1。但是
!0=1 !1=0
实际上除了!0之外的所有数进行!操作,都是0
"!"只是逆转真假罢了,一个数只有是0的时候才是假,所以只有0的时候进行"!"才是真,于是造成了这样的结果。
物理:开开关灯就灭,关开关等就亮
统一的逻辑就是:是真则为假,是假则为真
符号:
数学:⊕
计算机c++:xor ^
具体描述:
相同则为假,相异则为真。输入都为0或1则为假,输入为一0一1则为真。条件都真或者都假结论就假,条件一真一假才为真。
c++同样为第二条。
物理上的逻辑不好用语言描述图了,口胡一下:非电路和另一开关构造与电路,再交换开关复制成或电路:
图一严格按照数学表达式:
,
令上下的并联开关为k1,可以理解为同一个开关,二者操作同时,表达同时同等,k2理解为另一个开关,二者同时同等。
当k1打开,k2关闭的时候1^0,上路的灯可以亮,当k2打开,k1关闭的时候0^1,下路的灯可以亮。
当k1,k2都关闭0^0或者都打开1^1的时候,两个路的灯都不可以亮。
总的表示就是开关状态相同则不亮,开关状态不同则亮。
图2与非电路串或电路,并借此分析异或的条件与结论的关系:
如图。还是两个k1同步,两个k2同步。(下面的叙述较长,于是我以插入代码的形式压缩了起来)
左边这团电路是"与非电路",与非电路即先与再非的电路,当"与"表达为假的时候总表达为真,反之为假。
右边的或电路和灯是串的,所以逻辑就是单纯的或。
如果只有左电路,开关都打开灯一定不亮,灯不亮时开关一定都打开(开关是通路,灯被短路),二者互为充要条件。
放在整个电路中,虽然灯不亮时开关不一定都打开,但开关都打开时灯一定不亮(被短路),
所以开关都打开是灯不亮的充分不必要条件,灯不亮是开关都打开的必要不充分条件。
如果只有右电路,开关都关闭灯一定不亮,灯不亮时开关一定都关闭(灯被断路),二者互为充要条件。
放在整个电路中,虽然灯不亮时开关不一定都关闭,但开关都关闭时灯一定不亮,
所以开关都关闭时灯不亮的充分不必要条件,灯不亮是开关都关闭的必要不充分条件。
以上分析可知,开关都开或者都闭的时候(0^0或者1^1),灯一定不亮(0)。灯不亮的时候一定是开关都开或都关的时候。
也就是说,开关状态一致和灯的不亮,互为充要条件,既然它们互为充要,如果画成韦恩图,二者等价。
到这里可以用数学的逻辑推出来开关不一致对应的是灯亮:
很明显开关状态不一致是和开关状态一致是相反的说法,没有交集,所以说它对开关的不亮是既不充分也不必要条件。
因为开关如果分成一致(0)或不一致(1)只有0/1两个状态,灯泡的亮与不亮也只有两个状态,所以说灯亮的时候一定和开关状态不一致时等价的。
也就是说开关状态不一致的时候,灯一定是亮的。
具体来说,开关状态不一致的时候,"与非电路"为真(1),而或电路也为真(1),二者又是与的关系,都为真(1) 则表达为真(1),所以说灯泡就是亮的,为真(1)。
View Code
其实个人觉得两个图都比较好记,图一的优点在于完全对应数学表达,图二的优点在于不在乎k1,k2的交换,只要左右电路分别有对k1,k2就行。
运算表达式:
数学:条件p和条件q一真一假,则p⊕ q=真
条件p和条件q都为真或者都为假,则p⊕ q =假
抽象点有定义,乘法为与,"+"表逻辑或,条件加“'”为非:
F=AB'+A'B(完全对应图1,图二相当于 F=AB'A+B,两式结果相同)
计算机c++:
0^0=0;1^1=0;0^1=1;1^0=1;
统一的逻辑就是:同则为0,异则为1。
后记
写下来花了两三个小时,尽管已经查阅资料尽量保证语言的严谨性,但总怕难免有我误解的地方。
不过大的错误应该没有,或许会有小地方术语说错的,不过不影响物理图数学公式和c++逻辑上的统一性。
写完之后感觉自己受益良多,强化加深了自己在逻辑运算和位运算方面的理解,甚至包括一些c++语法上的理解。
同时我再也不会忘了这些算术运算符在c++的效果了。
到此结束!
希望看到的人也能有收获逻辑电路,同时欢迎各位提出建议,批评指正。
以上内容就是逻辑电路(对位运算与逻辑电路统一性的浅显理解入门)的相关内容介绍,喜欢侠外游戏论坛的朋友可以关注我们。 |
|