從零開始學編碼1
從零開始學編碼2
從零開始學編碼3
邏輯學是研究由條件推導結果的學科,在漫長的時間長河裡,雖然有很多人研究這門學科,但是因為人們習慣於用數學符號和運算元(+、-)來解釋這個世界,而邏輯學並不像數字可以使用加減乘除來運算,所以並沒有很好的突破,比較有名的是亞里斯多德的三段論法:
所有男人都必有一死;
蘇格拉底是男人;
因此,蘇格拉底必有一死。
在這個邏輯學基礎的三段論中,先假定兩個條件是正確的,根據兩個條件自洽的推斷出結論。
終於喬治布林出現了,布林發明了一種代數,相對於傳統代數用交換律、結合律以及分配律來處理數字,布林代數用來處理類,乙個類就是乙個事物的群體,也稱為集合。
而處理類的方法有並集和交集以及取反,例如:貓分為公貓和母貓,用m代表公貓,f代表母貓;貓根據顏色也可以分類,我們可以用t代表褐色的貓,b代表黑色的貓,w代表白色的貓,o代表其他顏色的貓;還可以根據是否絕育,用n表示已經絕育,u表示未絕育的貓。
我們用+號表示並集,x號表示交集,1表示全集,0表示空集。這樣可以得出
m+f=1 (所有公貓和母貓的並集,是全部的貓)
t+b+w+o=1 (各種顏色的貓的並集,也是全部的貓)
n+u=1 (絕育和未絕育的貓的並集,也是全部的貓)
1-m=f (在全部的貓中排除掉公貓,就是母貓的集合)
mxf=0 (公貓和母貓的交集是空集,因為不可能一直貓既是公貓又是母貓)
f + f = f (母貓和母貓的並集是母貓)
f x f = f (母貓和母貓的交集還是母貓)
如果你想要乙隻貓,你去寵物商店中,給店員說:我想要乙隻貓公貓,已經絕育,白色的或者褐色的;或者是乙隻母貓,已經絕育了,但是不要是白色的;或者來乙隻黑貓就行。
你提出了一大串購買條件,如果店員剛好學習過邏輯學,他會給出這樣乙個集合:
(mxnx(w+t))+(fxnx(1-w))+b
當然店員用+、-和x這三個符號以及並集和交集的概念把你所描述的條件進行了重新抽象,用+代替了or,用x代替了and,用1-代替了not。你表達的是(m and n and (w or t)) or (f and n and (not w)) or b。
這時你們可以選擇貓了,當然店員在邏輯數學方面很有天賦,他提議用數字1代表yes、true,表示這個貓符合這個標準,用數字0表示no、flase,表示貓不符合這個標準。
店員拿出來乙隻未絕育的褐色公貓,那麼我們代入 (mxnx(w+t))+(fxnx(1-w))+b這個式子:
(1x0x(0+1))+(0x0x(1-0))+0
就這樣店員輕易的將你的乙個邏輯問題轉化為乙個邏輯代數式。
下一步就是簡化這個式子,我們可以根據下面兩個規則來進行簡化。
用符號x代表and
and 0 1
0 0 0
1 0 1
用符號+代表or
or 0 1
0 0 1
1 1 1
(1x0x(0+1))+(0x0x(1-0))+0=0+0+0 = 0
最終簡化結果是0,代表no,false,顯然這只小貓不符合標準。
最後店員拿出來乙隻已絕育的灰色母貓,表示式可以表示為:
(0x1x(0+0))+(1x1x(1-0))+0 = 0+1+0 = 1
簡化結果為1,代表yes,true。顯然這只貓符合你的要求。
將現實的問題,通過轉化為邏輯代數,最終只用0和1就解決了問題,從前面的文章我們知道簡單的電路中根據開關閉合也能表達0和1這兩個二進位制數。那麼是不是可以將布林代數和電路相融合,設計出來乙個可以使用二進位制進行計算的計算機呢?
答案是肯定的。
在基本電路中我們可以將兩個開關串聯,如果開關都不閉合或者閉合其中乙個,電燈都不會亮,只有兩個開關都閉合了,燈泡才會亮起來。
我們將開關斷開用0表示,閉合用1表示,燈泡亮用1表示,燈泡不亮用0表示,通過做實驗,我們可以得到下面的結果
串聯的開關 0 1
0 0 0
1 0 1
如果我們用併聯的方式將兩個開關連線入電路,這樣兩個開關都斷開時,燈泡不亮,任何乙個閉合或者都閉合時,燈泡就會亮起來。
通過實驗,我們可以得到下面的結果:
併聯的開關 0 1
0 0 1
1 1 1
由上面的實驗結果,我們可以知道開關的串聯相當於布林代數的and運算(與運算);兩個開關的併聯相當於布林代數的or運算(或運算)。
這樣你當時買貓的時候,情景回顧一下:
你要乙隻公貓,已經絕育,白色的或者褐色的;或者是乙隻母貓,已經絕育了,但是不要是白色的;或者來乙隻黑貓就行。
店員給出表示式: (mxnx(w+t))+(fxnx(1-w))+b
店員告訴你x表示邏輯and,+表示邏輯or,而你知道兩個開關-串聯表示邏輯and,兩個開關-併聯表示邏輯or,這樣可以用8個開關做出下面的電路網路:
當店員第一次拿出來 乙隻未絕育的褐色公貓,我們將相應的開關閉合,得到的電路網路如下:
相應開關閉合後,燈泡並沒有亮起,說明這只貓不符合你的標準。
店員最後拿出乙隻已絕育的灰色母貓,將相應的開關閉合後,燈泡亮起:
燈泡亮起說明這只貓符合你的標準。
將實現中的問題轉化為邏輯問題,又實用布林代數來運算這個邏輯問題,最後使用電路來表達布林代數。從這也可以看出,0和1的二進位制編碼,不但能用於數學計算,也能用於邏輯計算。如果能夠理解這個轉化過程,我們探索計算機的步伐又前進了重要的一步。
從零開始學編碼1
我記得小時候學的課文,地下黨同志 前,將一把笤帚放到窗外,接頭的同志看到這個就知道這個地方不安全。我們看諜戰片的時候經常會有暗語,特殊聲音或標誌來通知自己的同志一些重要資訊。還有就是常見的發電報,滴滴噠噠的聲音。這些暗語,聲音,標誌,甚至於擺放特殊的笤帚。就是編碼,編碼重於約定。小時候我經常會想著,...
從零開始學編碼2
從零開始學編碼1 接著上次說,計算機內的世界是由0和1組成的。很多種事物可以表現成0和1。例如 女人是0,男人是1。手電筒滅是0,亮是1。這次我們就說一說手電筒。小時候上夜自習,農村的晚上沒有路燈,學完冰心奶奶的小橘燈後,我們熱衷於用酒盒子做燈籠,夜自習放學挑著燈籠走。後來見有人拿小手電筒,還帶彩光...
從零開始學編碼3
從零開始學編碼1中我們對編碼這個概念進行了了解。在從零開始學編碼2中學習了基本的電路知識。這篇我們說一說進製數。在遠古時期,人類便有了計數的需求,看著自己的手指,大拇指代表乙個蘋果,食指代表第二個蘋果,中指代表的第三個蘋果 好吧人類只有十根手指,可能只能做十以內的計數,後來人的思維能力發散,有了邏輯...