写点什么

逻辑运算系列(一):入门篇

  • 2019-09-03
  • 本文字数:3334 字

    阅读完需:约 11 分钟

逻辑运算系列(一):入门篇

本系列的重点内容是分享微电原理与电子信息,考虑到是系列文章的第一篇,本文决定从简单的逻辑运算入手,由浅入深开展整个系列。


对于有编程基础的开发者而言,二进制和逻辑运算中的“与、或、非”是非常熟悉的基础知识。在开始整个话题之前,先看下面几行代码(本文以 C 语言为例):



如上是一个典型的逻辑与应用:定义了四个 char 类型数组,分别命名为账号,密码,输入账号,输入密码,scanf_s 获取用户输入的数据,然后保存到对应的变量中,strcmp 函数是比较两个传入的字符串,如果两个字符串相同,则返回 0。然后通过 &&(逻辑与)比较输入的账号和密码与默认设置的账号和密码,如果都相同,则打印 “Yes”,如果有其中一个不正确,则打印 “No”。


这是 C 语言中的“与”逻辑运算,还有“或”逻辑和“非”逻辑,此处不一一举例了,接下来将分享逻辑运算的诞生和原理。


这里需要介绍两位重要人物,一位是冯·诺依曼(关于他的成就以及生平简介,感兴趣的可以自行搜索,此处不赘述),他对计算机发展史最重要的贡献之一就是首次提出二进制控制程序概念,而二进制就是计算机的基础也是逻辑运算“与、或、非”的基础。


另一位重要人物是数学家布尔,他首次采用数学方法研究逻辑问题,成功地建立了逻辑运算。他用等式表示判断,把推理看作等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律。某些编程语言里面有布尔类型这个说法,也是依据于此。


区别于其他进制,二进制最明显的特点就是极强的操控性和稳定性,举个最简单的例子,家里的电灯,可以控制它打开或者关闭,但是没办法控制它半开半闭,二进制就是相同的道理,所以二进制广泛存在于各行各业。


那么,二进制具体来说怎么理解呢?这就与中央处理器(CPU,Central Processing Unit)有关了,CPU 是一块超大规模的集成电路,主要由控制单元、运算单元、存储单元构成,是一台计算机的主要部分。CPU 主要通过触发器实现高低电平的转换。高低电平用脉冲信号进行传播,高电平用逻辑 1 表示,低电平用逻辑 0 表示,组合在一起就是我们所说的二进制。


逻辑运算就是在高低电平的基础上进行运算,下面这张图,我们称为数字波形图:



突出的部分就是高电平,也就是逻辑“1”,而直线部分是逻辑“0”,但在实际的数字系统中,数字信号并不规整,当矩形脉冲从高电平到低电平或低电平到高电平,边缘并没有这么陡峭,而要经历一个过渡的过程,为了方便作图而省略过度部分。


周期性数字波形图常用周期 T 和频率 f 来描述,脉冲波形的脉冲宽度用 t 表示,t 表示脉冲的作用时间,还有一个重要参数是占空比 q,表示脉冲宽度占整个周期的百分数,当占空比达到 50%的时候,矩形脉冲为方波,即 0 和 1 交替出现并持续占有相同的时间,这就是二进制的来源。关于二进制,在这就不详细介绍了,请关注后续文章。


逻辑运算,包括三种基本运算“与逻辑、或逻辑、非逻辑。”还有两种复合运算“同或、异或。”接下来一一讲解,为了方便理解,接下来会用图形的方式表示。



与运算可以理解为串联电路,上图是与逻辑电路图,电源 F 通过开关 L1、L2 向灯供电,只有 L1、L2 同时闭合时,灯才亮。L1、L2 中只要有一个断开或者两个都断开时,灯则熄灭,在这个电路中,开关 L1、L2 与灯的关系是,只有一个过程具备所有的条件,这个过程才会运行,这种关系称之为与逻辑。


如果用二进制逻辑 0 和 1 来表示以上开关和灯的状态,假设开关断开和灯不亮用逻辑 0 来表示,开关闭合和灯亮用逻辑 1 来表示,即可得出真值表。


简单来说,与逻辑可以总结为 0 出 0,全 1 出 1。用来实现与运算的电路叫做与门,下面是国际通用的与门符号。



通过线路 A、B 输入二进制字符,进行与运算,然后输出一位字符。


与运算则是串联电路,或运算正好相反,是一个并联电路。



上图所示是一个简单的或逻辑电路,电源 F 通过开关 L1 或 L2 想灯供电。只要开关 L1 或者开关 L2 任意一个或者全部闭合,灯就会亮。而当开关 L1 和 L2 全部断开的时候,灯则不亮。


此电路中开关 L1、L2 和灯之间的逻辑关系是,一个过程中的几个条件只要满足一个条件,这个过程就会运行,这种关系称为或逻辑。指 LI 闭合和 L2 闭合任一条件达成或者全部达成,根据以上条件,即可得到真值表。


简单来说,或逻辑可以总结为有 1 出 1,全 0 出 0。


用来实现或逻辑运算的电路叫做或门,如下图。



通过线路 A,B 输入二进制字符,进行或运算,然后输出一位字符。


非逻辑和与、或逻辑不同的是,非逻辑是取反运算。



如上图,电压通过一继电器触电向灯供电,A 为继电器的触点,即通常 A 不通电,触点自动闭合,灯亮,而当 A 通电时,触点自动断开,灯则不亮。由以上条件可知,非逻辑为相反条件。这个逻辑关系为非逻辑。


若用 0 和 1 来表示继电器和灯的状态,A 不通电和灯不亮用 0 表示,相反,A 通电和灯亮用 1 表示,则得出非逻辑的真值表。


简单来说,非逻辑可以总结为有 1 为 0,0 为 1。同样,用来实现非逻辑的电路叫做非门。



通过线路 A、B 输入二进制字符,进行非运算,然后输出一位字符。这个要特别注意前面的小圆点,这是非逻辑的特殊标识,在以后的逻辑电路中会频繁用到。


在实际运算中,除了与、或、非三种基本运算外,还会涉及一些其他的基本组合逻辑运算,如与非,或非,同或,异或等。


与非运算是与运算和非运算的组合运算。



A          BL
0          01
0          11
1          01
1          10


上面是与非的真值表,可以看出,与非逻辑是与逻辑的相反值。或非运算是或运算和非运算的组合运算。



A         BL
0         01
0         10
1         00
1         10


上面是或非的真值表,可以看出,或非就是或逻辑的相反值,还有两个比较特殊的基本组合逻辑运算,异或和同或。异或的逻辑关系是,当输入两个状态相同时,输出为零,当两个输入状态不同时,输出为一。



A              BL
0              00
0              11
1              01
1              10


上面是异或的真值表,相同为 0,不同为 1,接下来是同或逻辑:



A            BL
0            01
0            10
1            00
1            11


以上是逻辑的一些基本原理,但真正在计算机里并不是这个样子,而是用三极管进行控制,当然原理是一样的。


CPU 识别高低电平,然后做出逻辑运算,由于时间问题,三极管之类的就不多说了,只要理解上面的一些抽象电路即可,想要深入研究,请关注之后的文章或者了解一些计算机硬件知识。



上面是两道波形图(本人画的,原谅我,已经尽力了),通过上下两条电平对比,上面的转换二进制为 0101010,下面的转换二进制为 0010010。接下来就看看如何对上面的图进行逻辑运算。


先来看逻辑与运算,逻辑与的规则上面总结了,有 0 出 0,全 1 出 1,所以用与逻辑可以概括为 0000111。这组二进制就是把上面的两幅波形图用与逻辑合二为一,就是下面这幅图。



这里可能有人会说,结尾是高电平,为什么要把图画下来,其实这些都是为了视觉体验,让人看上去舒服一些,所以用了一条稍短的线,不算数的。然后就是或逻辑,算法同上,不过就是按照或逻辑的规则,有一出一,全零出零,结果为 0111010,这个就不做图了,打架可以在纸上画画,稍作理解,还有非运算,非运算由于是相反值,是没有办法对两组波形图进行运算,只能对一组数据取相反值。


这些就是逻辑的一些原理,属于计算机硬件和软件公用的一部分,这些只是基础部分,之后会涉及到一些组合逻辑电路,微机原理,还有汇编语言方面的问题。


2019-09-03 08:339970

评论

发布
暂无评论
发现更多内容

六大招式,修炼极狐GitLab CI/CD “快” 字诀

极狐GitLab

DevOps CI/CD 持续交付 runner 极狐GitLab

一年经验年初被裁面试1月有余无果,还遭前阿里面试官狂问八股,人麻了

程序员小毕

Java spring 程序员 面试 程序人生

Vue自定义指令(一)初识

Augus

vuejs 11月月更

算法题学习---链表中的节点每k个一组

桑榆

算法题 11月月更

深入理解Metrics(一):Gauges

冰心的小屋

Java metrics Guages

python如何处理程序异常

芥末拌个饭吧

Python 11月月更

vue_Promise学习

Studying_swz

前端 11月月更

前端食堂技术周刊第 58 期:TypeScript 4.9 RC、10 月登陆浏览器的新功能、Turbopack 真的比 Vite 快 10 倍吗?100 天 Modern CSS 挑战

童欧巴

typescript chrome

DevOps|乱谈开源社区、开源项目与企业内部开源

laofo

DevOps 研发效能 工程效率

知识经济时代,企业应该如何进行知识管理?

Baklib

知识管理

CSS学习

Studying_swz

CSS 前端 11月月更

应对大规模的资产扫描一些小Tips

穿过生命散发芬芳

11月月更 资产扫描

第四次工业革命的“知识力”,流淌在百度这条创新流水线上

脑极体

联通DataOps和MLOps:将机器学习推理作为新的数据源

Baihai IDP

人工智能 大数据 AI DataOps MLOps

2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到

福大大架构师每日一题

算法 rust 福大大

涛思数据杨攀:如何寻求产品、商业与技术的平衡

GGV

产品 技术 开发者 商业 SaaS

Java For Data Science

Mahipal_Nehra

java; data-science java client Java core Java static

数据驱动科研,清华大学中国新型城镇化研究院使用 ModelWhale 云端协同创新平台

ModelWhale

人工智能 新基建 云平台 数据科学 学科交叉

Verilog语法之测试文件

芯动大师

Verilog 11月月更 测试文件

【愚公系列】2022年11月 微信小程序-app.json配置属性之entryPagePath

愚公搬代码

11月月更

CSS学习笔记(一)

lxmoe

CSS 前端 学习笔记 11月月更

SPL比SQL更难了还是更容易了?

石臻臻的杂货铺

sql SPL 11月月更

IDC MarketScape :百度安全位居NESaaS市场领导者位置

百度安全

安全 云安全

HTML5学习

Studying_swz

html 前端 11月月更

数据库的体系结构

阿泽🧸

数据库 11月月更

一步步带你设计MySQL索引数据结构

程序知音

Java MySQL 数据库 后端技术

阿里云丁宇:云原生激活应用构建新范式,Serverless奇点已来

阿里巴巴云原生

阿里云 Serverless 容器 RocketMQ 云原生

袋鼠云陈吉平:深耕国产自研数字化技术与服务,持续为客户创造价值

袋鼠云数栈

重磅|九科信息企业级超级自动化平台通过“信息系统安全等级保护三级认证”

九科Ninetech

Spring Boot「25」外部配置元数据

Samson

Java spring 学习笔记 spring-boot 11月月更

设计千万级学生管理系统的考试试卷存储方案

Geek_1264yp

逻辑运算系列(一):入门篇_语言 & 开发_周澳_InfoQ精选文章