数位逻辑 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


<<:  [Day-28] cin深入练习(二)

>>:  Day-25 Deadlock

Day9:[资料结构] Linked-List - 链结串列

Linked List为抽象的资料结构,概念有点像三国的连环船,一艘船(节点)连结着下一艘船(节点...

Day–3 Excel之快速移动栏列之术

欢迎大家,来到了第三天依旧充满干劲,今天要来跟大家介绍Excel的文字格式,以及今天的重点调整栏列的...

资料储存 - SqlAlchemy

之前我们做的所有操作,都是在 Jupyter Notebook 进行,没有进行资料储存的动作,所以只...

Day06-流量限制(一)

前言 不管你的服务器有多少 CPU、多大量的记忆体,每秒可以处理的请求数终究是有限的。为了避免资源被...

用 Python 畅玩 Line bot - 30:Line Notify(三)

在上篇中,我们是需要到 Line Notify 登入後的个人介面发行 token,但总不能叫每一个加...