写点什么

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

  • 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:3310105

评论

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

车联网数据安全新挑战的技术应对方案

Speedoooo

车联网 物联网 数据安全 容器安全

java高级用法之:在JNA中使用类型映射

程序那些事

Java 程序那些事 3月月更 JNA

Linux之time命令

入门小站

Linux

数字孪生PaaS平台WDP4.3正式发布!三大升级,让开发更简单

Meta 小元

云原生 智慧城市 数字孪生

恒源云(GpuShare)_无监督的QG方法

恒源云

自然语言处理 深度学习

企业如何实现在线客服功能?

小炮

在线客服

【ELT.ZIP】OpenHarmony啃论文俱乐部——轻翻那些永垂不朽的诗篇

ELT.ZIP

OpenHarmony 数据压缩 ELT.ZIP

科技向善,“以人为本”将掷地有声!

鼎道智联

一文读懂并发与并行

潘大壮

并发编程 多线程 并行 并发’ #java

架构实战营6&微信业务架构&学生管理系统方案

唐诗宋词

微信业务架构图&学生管理系统架构设计

高山觅流水

架构实战营 「架构实战营」

澳鹏数据标注平台MatrixGo加速人工智能落地

澳鹏Appen

人工智能 数据标注 训练数据

TDesign 更新周报(2022年3月第4周)

TDesign

Petal Maps的美学钥匙,解锁AITO问界M5的硬核浪漫

脑极体

架构实战营-第6期 模块一课后作业

乐邦

「架构实战营」

JavaScript 引擎是如何实现 async/await 的

CRMEB

个全中文注释的迷你Spring!

程序员阿杜

Java spring springboot

Flink Next:Beyond Stream Processing

Apache Flink

大数据 flink 编程 流计算 实时计算

阿里巴巴代码规约检测&Java 代码规约扫描

阿里云云效

阿里巴巴 阿里云 代码扫描 #java 代码规约检测

面试题笔记

Clarke

智能家居开放平台技术建设新思路

Speedoooo

物联网 智慧社区 智慧家居 智能终端 应用平台

代码评审的最佳解决方案

阿里云云效

云计算 阿里云 敏捷开发 代码管理 代码评审

CPP进阶:迭代器失效

正向成长

迭代器失效

Hoo虎符研究院|区块链简报 20220328期

区块链前沿News

虎符 Hoo 虎符交易所

性能测试中的LongAdder

FunTester

性能测试 FunTester

车载运行小程序,快速打造智慧汽车应用生态

Speedoooo

车联网 物联网 智慧终端 智慧汽车 车载小程序

在线HTML压缩工具

入门小站

工具

[Day2]-[回溯] N皇后问题

方勇(gopher)

LeetCode 动态规划 数据结构算法

直播预告|FeatureStore Meetup V2

星策开源社区

人工智能 大数据 开源 特征平台 MLOps

在线常用crontab表达式大全验证解析

入门小站

工具

赋能创新,深开鸿重磅发布面向金融行业KaihongOS发行版

科技汇

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