iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
自我挑戰組

後端工程師與圖的修練系列 第 27

數位邏輯 2B OR NOT 2B

數位邏輯 (Digital Logic) 是用來代表電路輸入與輸出的控制,橫跨非常多領域,可以用電子、電腦科學、數學…etc 來解釋。

數位邏輯是什麼?

數位邏輯基本上就是在控制 0, 1 輸入到某些黑箱子之後,要選擇輸出什麼,基於這個簡單的原理,便可以發展出各種應用機制。

這個黑箱子就叫做邏輯閘,最最最基礎的邏輯閘就這三種,其餘的都是這三種的組裝變化 (可自行參考 Wiki)。

每個邏輯閘都有對應的真值表,意思就是兩個輸入跟輸出的對應關係。

AND 及閘

https://ithelp.ithome.com.tw/upload/images/20211007/20092753E8svRcc1sO.png

真值表:
https://ithelp.ithome.com.tw/upload/images/20211007/20092753mqK2sV3OzK.png

OR 或閘

https://ithelp.ithome.com.tw/upload/images/20211007/20092753xcOxQDzBmm.png

https://ithelp.ithome.com.tw/upload/images/20211007/20092753VAwXZ0nwLl.png

NOT 反閘

https://ithelp.ithome.com.tw/upload/images/20211007/20092753KFsEzmBDEM.png

https://ithelp.ithome.com.tw/upload/images/20211007/200927539umWiN0Mns.png

AND

  • 全部都是 1 才是 1
  • 全部通電才有電

OR

  • 其中 1 個有 1 就有 1
  • 一個有電就有電

NOT

  • 0 變 1 , 1 變 0
  • 輸出相反的電

為什麼一開始只需要知道這三種就好,因為其他的邏輯閘都是從上面延伸而來的,比方說 NAND 閘,基本上就是先做了 AND 再接一個 NOT:

https://ithelp.ithome.com.tw/upload/images/20211007/20092753Hy3e5chyuX.png

等同於

https://ithelp.ithome.com.tw/upload/images/20211007/20092753rzqk05H3Lr.png

真值表也就是把 AND 每一個反過來。

https://ithelp.ithome.com.tw/upload/images/20211007/20092753b9c5hIlaKC.png

像這樣的邏輯閘,從最基本的一個電晶體開始建構,直到使用 IC ,具象化出來就是一顆 IC 晶片 (TTL 的 7400 系列, CMOS 的74HC 系列 ),以及多工器,一直到可程式化的晶片,甚至現在直接寫 VHDL 設計 VLSI 產生整個邏輯電路,都有邏輯閘的存在。

從應用面來說,你可以用邏輯閘做出搶答電路、加法電路,各種運算電路,不過現在倒不需要這麼土炮了。

對任何程式語言都可以使用 AND, OR 來做邏輯判斷:

if(doorOpen == true) {
	If(detection == "human") {
	    console.log("hello")
	}
}

透過 AND 就可以做成:

if (doorOpen && detection == "human" ) {
    console.log("hello");
}

對程式來說,上述的 code 就式有兩個輸入做 AND 運算:

https://ithelp.ithome.com.tw/upload/images/20211007/200927532v4f2dGQB9.png

那假設有三個呢?

if ((doorOpen && detection == "human" ) && time == "7:00 AM") {
    console.log("hello");
}

為了避免探討語言執行先後順序這種很不直覺得寫法,所以我就加了括號,這要怎樣表現成邏輯閘?,加在後面就好了:

https://ithelp.ithome.com.tw/upload/images/20211007/20092753iVKVdqICPx.png

邏輯化簡

數位邏輯是一門學科,早已有成熟的方法與定理可以畫簡超大型邏輯閘,最耳熟能詳的就是卡諾圖,由於卡諾圖畫簡方法不夠在本篇文章敘述,對於高階程式開發者來說並不是那麼重要的事,則可自行延伸閱讀。

標題的 2B OR NOT 2B 會怎樣?

假設 2B 是變數,根據程式語法 OR 運算會把兩邊的元素做 OR 得到:

https://ithelp.ithome.com.tw/upload/images/20211007/20092753H2FudsM3s5.png

所以這個東西就直接會變成永遠都是 1 的邏輯,畫簡起來簡潔有力:

https://ithelp.ithome.com.tw/upload/images/20211007/20092753R9aITVl3nX.png

就是什麼都不要加。

References:
[1] https://zh.wikipedia.org/wiki/%E9%82%8F%E8%BC%AF%E9%96%98


上一篇
ADM / PDM 網路圖
下一篇
有向無環圖
系列文
後端工程師與圖的修練31

尚未有邦友留言

立即登入留言