开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

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

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

评论

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

PoseiSwap 更新质押系统,并将在 8 月18 日开启“Trident ”快照

大瞿科技

OpenTiny Vue 组件库实现主题配置和UX交互规范自定义

OpenTiny社区

开源 Vue 前端 组件库

Vue 框架提升加载速度的经验分享

FinClip

奖金丰厚 等你来拿!第六届开源创新大赛飞桨赛道下半场来啦

飞桨PaddlePaddle

人工智能 百度飞桨

一文带你读懂设计模式之责任链模式 | 京东云技术团队

京东科技开发者

源码分析 设计模式 责任链模式 企业号 8 月 PK 榜

WIFI7 M.2 moudle-QCN9274+QCN6274-Pinnacle of WiFi field-support-MU-MIMO-OFDMA-TWT technology

wifi6-yiyi

6G WiFi 7

BSN“五、十、百”工程实施半年成果丰硕,助力数字化转型和高质量发展

BSN研习社

微信小程序:跨端开发框架的繁荣发展之路

没有用户名丶

通宵加班设计的储能板不能用?厚铜PCB设计这个问题一定要注意

华秋电子

储能

Eudic欧路词典 for Mac(英语学习工具) v4.4.5增强激活版

mac

苹果mac Windows软件 欧路词典 Eudic mac 英语学习工具

《知识图谱互联互通白皮书》正式发布,合合信息携手电子标准院共同推动技术规范化发展

合合技术团队

人工智能 知识图谱

SpringBoot3集成Kafka

Java kafka 架构 springboot SpringBoot3

ThreadLocal不过如此

java易二三

Java 程序员 计算机

火山引擎DataLeap:助力PICO落地数据流程规范,提升开发效率

字节跳动数据平台

数据中台 数据治理 数据安全 数据研发 企业号 8 月 PK 榜

鸿蒙生态星河璀璨| 先行者李洋全力以赴,拥抱星辰大海

最新动态

直播系统源码协议探索篇(二):网络套接字协议WebSocket

山东布谷科技

软件开发 websocket 源码搭建 直播系统源码 网络套接字协议

基于迁移学习的基础设施成本优化框架,火山引擎数智平台与北京大学联合论文被KDD收录

字节跳动数据平台

大数据 A/B测试 企业号 8 月 PK 榜

SimpleDateFormat 线程安全问题修复方案 | 京东物流技术团队

京东科技开发者

jdk8 线程安全 SimpleDateFormat类 SimpleDateFormat 企业号 8 月 PK 榜

Java如何生成随机数?要不要了解一下!

java易二三

Java 程序员 random 计算机

OLED屏幕,LED,AMOLED哪个更好?

Dylan

LED 显示器 LED显示屏

【华秋推荐】无线充电的原理与解决方案

华秋电子

无线充电

Flink 数据集成服务在小红书的降本增效实践

Apache Flink

大数据 flink 实时计算

React请求机制优化思路 | 京东云技术团队

京东科技开发者

React 前端性能 企业号 8 月 PK 榜 react18 请求机制

这,就是大模型时代的生产力!

飞桨PaddlePaddle

人工智能 paddle 百度飞桨 文心大模型 WAVE SUMMIT

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