微机原理及应用->微型计算机基础绪论
微型计算机基础绪论
- 一些英文
- 纲要
- 习题
- 微型计算机基础绪论
- 课程研究内容
- 微型计算机系统组成
- 主机系统(CPU,存储器,输入输出接口,总线)
- 微处理器(运算器,控制器,寄存器组)
- 存储器
- 内存储器
- 特点
- 存储容量与读写操作
- 分类方式
- 输入/输出接口
- 总线
- 软件系统
- 总结图
- 微型计算机的一般工作过程
- 指令
- 顺序执行
- 并行执行
- 两种方式的对比
- 冯诺依曼计算机
- 工作过程
- 体系结构
- 优缺点
- 哈佛结构
- 数制及其转换
- 进制统一表示
- 十进制表示法
- 二进制表示法
- 十六进制表示法
- 八进制表示法
- 进制转换
- 非十进制数到十进制数的转换:按相应的权表达式展开
- 十进制数到非十进制数的转换
- 总结
- 计算机中的编码
- 编码
- 编码种类
- BCD码
- BCD、十进制、二进制码转换
- 存储方式(压缩BCD码 扩展BCD码)
- ASCII码
- 奇偶校验(编码1的个数)
- 计算机中数的表述与运算
- 计算机中的二进制数表示
- 浮点数
- 数的性质
- 无符号数
- 有符号数
- 原码(True form)
- 反码(ones' complement)
- 补码(two's complement)
- 补码的说明
- 算术运算
- 1000 0000
- 计算机能力的局限性
- 无符号整数的表示范围
- 有符号整数的表示范围
- 符号数运算中的溢出判断
- 符号二进制数与十进制数的转换
- 基本逻辑运算与逻辑门
- 逻辑
- 逻辑运算/布尔代数
- 与
- 与门(AND gate)
- 或
- 或门电路(OR gate)
- 非
- 非门电路(NOT gate)
- 与非
- 与非门
- 或非
- 或非门
- 异或
- 异或门
- 同或
- 同或门
一些英文
微处理器MPU=Microprocessor Unit
处理器CPU=Center Processing Unit(有时也指代微处理器)
地址总线AB=Address Bus
数据总线DB=Data Bus
控制总线CB=Control Bus
总线接口部件BIU=Bus interface Unit
字节Byte=bit(一组八位二进制数)
只读存储器ROM=Read Only Memory
随机存取存储器RAM=Random Access Memory
程序计数器PC=Programming Counter
十进制D=decimal
二进制B=binary
十六进制H=hex
八进制O=octal
二进制编码的十进制BCD=Binary-Coded Decimal
1word=2Byte,1Byte=8bit
word是字,Byte是字节,bit是位
与门=AND gate
或门=OR gate
非门=NOT gate
与非门=NAND gate
或非门=NOR gate
异或门=XOR gate
同或门=XNOR gate
纲要
微型计算机系统组成
计算机中的数制及其转换
补码的概念和运算
冯・诺依曼结构及基本原理
基本逻辑门及其逻辑关系
习题
微处理器、微型计算机、微型计算机系统三者间有什么不同?
计算机为什么要采用二进制? 除二进制外为什么还有其它计数制?
什么是无符号数? 什么是有符号数?
为什么要引入补码?
冯・诺依曼计算机具有什么结构特点和基本工作原理?
利用冯・诺依曼计算机执行一条指令需要的基本过程?
什么是逻辑? 真值表的含义?
程序计数器的作用。
不同计数制之间如何转换?
原码、反码和补码之间的关系?
二进制运算
如何判断运算结果是否溢出?
基本逻辑门电路的符号及输入与输出的关系(逻辑真值表)
内存的组织关系:单元, 单元内容, 单元地址
补码的概念及其运算
基本逻辑门及其逻辑关系
补码数A8H对应的十进制数是多少?
解:
因为:A8H=10101000B
所以,该数是负数
要获得该数的真值,需要对该数再求补码:
[A8H]补 =[10101000]补 =11011000,[\mathrm{A} 8 \mathrm{H}]_{\text {补 }}=[10101000]_{\text {补 }}=11011000,[A8H]补 =[10101000]补 =11011000, 真值为 :-1011000
该数对应的十进制数是:-88
微型计算机基础绪论
课程研究内容
如果需要从事计算机软件理论、体系结构设计,那就需要计算机组成原理、结构设计的相关课程;
如果未来侧重于计算机应用系统、过程控制系统设计,那就是本课程的重点。
计算机的主要应用分为:数值计算、信息处理、过程控制
工业过程控制的对象往往是一些達夹变化的非电物 理量,要使这类信号能够被计算机所识列和 处理,需要经过一个角杂的过程。
这门课程关注的重点:计算机的基础知识、微型计算机基本原理、微机接口控制,也就是计算机硬件技术和输入输出接口控制技术。
为了先对所学的东西有一个大致的概念,先来看两个案例。
案例一:家庭安全防盗系统设计
为一栋含8个窗卜的HOUSE设计一个简易的安全报警系统。
系统功能要求:
- 每个窗台安装一个检测装置,当某一监测装置连续5次检测出异常时,启动报警(警铃响,警灯闪烁);
- 在危险解除后关闭报警(不能一直响应);
- 在需要时启动系统布防,不需要时则可关闭系统(长期在家时并无危险)。
案例分析:
如何检测出有无异常 ?
检测到的信息在计算机中如何表示 ?
如何确定异常次数?/异常来自同一监测装置?(具体一个窗台上连续5次,以消除干扰)
如何启动和停止报警?
案例二:温室温度控制系统
由3台电炉实现温室温度控制
系统功能要求
- 温室温度控制为:25"C -38"C;
- 实时显示2位温室温度;
- 当在给定时间不能保证温度在要求范围时要发出警报信号
案例分析
设计硬件系统:
- 温度测量电路
- 温度控制电路
- 温度显示电路
- 报警电路
设计软件系统:
- 温度检测
- 温度控制(根据测量值和给定值控制电炉通断)
- 显示温度
- 报警输出
室温如何读取并能被计算机识别?
温度如何显示?
怎样实现报警?
系统要将非电信号转化为连续变化的电信号,再转化成计算机能够识别的离散电信号,与内部内存的数据进行比对。
学习完这门课程后,我们就要能完成一些类似的系统设计。
涉及:数据在计算机中表示、现场数据的采集(获取)与转换、现场数据的存储与处理
主要讲授
数值信息表示
微型计算机基本原理(微处理器结构,Intel80x86基本指令集)
汇编程序设计(软件设计)
半导体储存器及其接口设计(硬件设计)
输入输出技术(硬件设计,数字并行接口、模拟量并行接口)
汇编语言和计算机基本原理息息相关,而高级编程语言,执行一条程序则不能知道他到底在哪里执行,内存在哪。
微型计算机系统组成
外部设备:可以和CPU进行数据交换,但不能直接和CPU进行数据交换,u盘、手机、键盘鼠标,都属于这个范畴。
主机系统(CPU,存储器,输入输出接口,总线)
微处理器(运算器,控制器,寄存器组)
微处理器简称CPU(Center Processing Unit)
{运算器 控制器 寄存器组 \left\{\begin{array}{l}\text { 运算器 } \\ \text { 控制器 } \\ \text { 寄存器组 }\end{array}\right.⎩⎨⎧ 运算器 控制器 寄存器组
控制器,由一组控制逻辑单元
寄存器:就像是火车站的行李寄存点一样,当我们需要进行多个数的运算时,前两个数的结果不需要立刻抛出到很远的地方,就可以先放到寄存点,然后再依次求和。但是数据的暂时存放只是寄存器的一个功能而已,具体的其他功能,之后的章节在详细描述。
存储器
计算机中的记忆装置。 用于存放计算机工作过程中需要操作的数据和程序。
{内存储器 外存储器 {联机外存 ⟶硬磁盘、固态盘脱机外存 ⟶各种移动存储设备\left\{\begin{array}{l}\text { 内存储器 } \\ \text { 外存储器 }\left\{\begin{array}{l}\text { 联机外存 } \longrightarrow \text {硬磁盘、固态盘} \\ \text { 脱机外存 } \longrightarrow \text {各种移动存储设备}\end{array}\right.\end{array}\right.⎩⎨⎧ 内存储器 外存储器 { 联机外存 ⟶硬磁盘、固态盘 脱机外存 ⟶各种移动存储设备
实际上硬盘的借口规定SATA就是指和CPU的接口。
外存储器都属于外设,不能直接和CPU发生数据交换,一定要通过I/O接口。之后描述的存储器,不特殊说明都是指内存储器,简称内存。
上图为机械硬盘
上图为内存ROM
内存储器
特点
- 存取速度较快,容量相对较小。
- 内存按单元组织,每单元都对应个惟一的地址 ;
- 每个内存单元中存放1Byte数据;
- 内存单元个数称为内存容量。
解释:内存就相当于是摩天大楼,由很多房间构成,房间门牌号码的长度取决于有多少房间
。门牌号码的编制方式也很讲究,如果只有9层楼,那么只需要一位十进制数801,那么得到这个信息的客户肯定就知道,要先去8楼找房间了。
存储容量与读写操作
- 存储容量:存放的数据量。用字节表示。
- 对存储器的操作:读(出),写(入)
每8位0或1称 为1字节 (Byte),内存单元每个单元都是1Byte,即一字节,也即一个八位二进制码,每个单元的内容都是这样。
内存地址编码方式类似于摩天大楼的编码方式,内存单元的个数称为容量,表征对数据存储量的大小。
读,是copy一份文件,非破坏性操作;写则是破坏性操作,二者都是信息交换操作。
分类方式
安装工作方式{随机存取存储器(RAM) 只读存储 器 (ROM) \left\{\begin{array}{l}\text { 随机存取存储器(RAM) } \\ \\ \text { 只读存储 器 (ROM) }\end{array}\right.⎩⎨⎧ 随机存取存储器(RAM) 只读存储 器 (ROM)
内存RAM就是想读就读,想写就写,十分方便,缺点就是需要后备电源;
只读ROM的写是有条件的,但是它不需要后备电源,也就是掉电仍能保持数据,U盘,相机,手机都是这样。
输入/输出接口
接口是CPU与外部设备间的桥梁
主要功能:
数据缓冲寄存;
信号电平或类型的转换;
实现主机与外设间的运行匹配。
为什么需要接口呢?
比方说你走在路上,想要和车子里的人说话,那没办法,车子就没法保持高速运转,只能慢下来甚至停下来。
而计算机里的CPU是高速设备,他要和相当数量的“行人”(外设)有交流,不可能每个行人他都过来慢慢跑。
所以这个时候,就需要一个中转站,接口,相当于一个小货仓,行人想说什么,写纸条上,放在这个中转站,CPU就检查这个仓库就对了,不需要和行人直接对接,只要定期来看看这里存了些什么东西即可。
外设可能是数字信号、模拟信号、按位传输、按帧传输,种类,速度要求各不相同,而CPU本身的驱动能力也相对有限,所以通过一个接口是十分有必要的。
总线
是一组导线和相关的控制、驱动电路的集合。
是计算机系统各部件之间传输地址、数据和控制信息的通道。
总线是一组导线加一堆控制电路,也就是一个传送带,大家各个部件共用,如果发生争执,那总线自己要裁决先运谁的货。
总线今天仍然是计算机系统的瓶颈,因为多个部件,大家速度都很高,各不相同,又要共用,通道的速度就直接影响了整个系统的性能。
分类:
地址总线(AB)
数据总线(DB)
控制总线(CB)
总线上跑的是0和1,但是属性是不同的,一组01可能是地址(房间门牌号),一组01可能是单元内容(住的谁),可能代表着一些控制信息(有人敲门进房间之类的,要提取数据)
因此三条线对应了三种不同的信息。
软件系统
软件:为运行、管理和维护计算机系统或为实现某一功能而编写的各种程序的总和及其相关资料。
软件 {系统软件 {操作系统 编译系统 网 络系统 工具软件 应用软件 \text { 软件 } \left\{\begin{array}{l} \text { 系统软件 }\left\{\begin{array}{l} \text { 操作系统 } \\ \text { 编译系统 } \\ \text { 网 络系统 } \\ \text { 工具软件 } \end{array}\right. \\ \text { 应用软件 } \end{array}\right. 软件 ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧ 系统软件 ⎩⎪⎪⎨⎪⎪⎧ 操作系统 编译系统 网 络系统 工具软件 应用软件
软件不等于程序,还包括运行数据和相关文档资料的总和。
Windows系统风格的继承,每一代都有不同的员工,如何保证?就依赖于文档资料的管理,有了不同的历史版本信息,后面的人就能很快读懂之前的程序信息。
文档管理在软件工程上相当重要。
我们大部分编的都是应用程序。
总结图
主机系统特征
能够与CPU直接进行信息交换的部件属于主机系统
不能够与CPU直接进行信息交换的部件属于外部设备
微型计算机的一般工作过程
刚刚我们已经知道了计算机由硬件系统和软件系统构成,包括CPU,存储器,总线,I/O,外设,软件。
计算机的工作就是执行程序,而程序是指令的序列
那么计算机的工作就是按照一定的顺序,一条条地执行指令
指令
指令的执行过程
计算机的工作过程就是执行程序的过程
程序是指令的序列,程序是由指令组成的,计算机的工作过程就是执行指令的过程
分析和执行只需要在CPU内部完成即可,只有取指令需要到存储空间去,因为程序是在那里存起来的,也就是说只有取指令需要用到总线。
顺序执行
一条指令执行完了再执行下一条指令。
执行时间=取指令+分析指令+执行指令
设: 三个部分的执行时间均为 Δt,\Delta \mathrm{t},Δt, 则 ::: 执行n条指令时间 T0\mathrm{T}_{0}T0 为:
T0=3nΔt\mathrm{T}_{0}=3 \mathrm{n} \Delta \mathrm{t}T0=3nΔt
并行执行
同时执行两条或多条指令。
仅第1条指令需要3 Δ\DeltaΔ 时间,之后每经过1 Δ\DeltaΔ t,就有一条指令执行结束 执行时间: T=3Δt+(n−1)Δt\mathrm{T}=3 \Delta \mathrm{t}+(\mathrm{n}-1) \Delta \mathrm{t}T=3Δt+(n−1)Δt
打开水龙头的过程,开头是要稍微等一下的,然后就源源不断了,这个也类似。本来水管口子哪里有一点是不工作的,然后整个水管全部被占用了(类比总线)
两种方式的对比
某程序段经编译后生成18000条机器指令,假设取指令、分析指令和执行指令所用的时间均为2ns。则使用并行流水线方式完成该程序段所需的时间为( )ns。
A. 36004
B. 36006
C. 108000
D. 36000
选A
并行:更高的效率,更高的复杂度
相对于顺序执行方式,指令并行执行的优势用加速比S表示:
S=顺序执行花费的时间÷并行执行花费的时间
例:
3nΔt3Δt+(n−1)Δt=3n2+n\begin{aligned}\frac {3\mathrm{n} \Delta \mathrm{t} }{3 \Delta \mathrm{t}+(\mathrm{n}-1) \Delta \mathrm{t}}=\frac {3 \mathrm{n}}{2+\mathrm{n}}\end{aligned}3Δt+(n−1)Δt3nΔt=2+n3n
当然这只是理想情况下,取值译码执行全部用一样的时间,完全无缝拼接,但其实每条指令当然不一样,如果还要取操作数就更要断流了。
冯诺依曼计算机
冯・ 诺依曼计算机的工作原理:存储程序工作原理
程序从存储器到CPU
结构特点:运算器为核心
工作过程
Programming Counter
计数器(寄存器的一部分)指向第一条指令的存储地址,CPU就会将这一指令取出,如果需要操作数,再去取,最后返回。
取一条指令的工作过程:
以十六进制B1H为例,计数器先搞到它的地址(这个操作由地址寄存器完成,但不对程序员开放),地址总线就要起作用了,因为进别人房间要先敲门,CPU就要发“读存储器”的命令,指令若不是地址,就要从数据线再传到译码
(1) 将指令所在地址赋给程序计数器PC;
(2) PC内 容送到地址寄存器AR,PC自动加1 ;
(3) 把AR的内容通过地址总线送至内存储器,经地址译码器译码,选中相
应单元。
(4) CPU的控制器发出读命令。
(5) 在读命令控制下,把所选中单元的内容(即指令操作码) 读到数据总线
DB∘\mathrm{DB}_{\circ}DB∘
(6) 把读出的内容经数据总线送到数据寄存器DR。
(7) 指令译码
- 数据寄存器DR将它送到指令寄存器IR,然后再送到指令译码器田
体系结构
冯诺依曼的五部件结构,运算器控制器在CPU中,存储器特指内存,输入有键盘鼠标等,输出有显示器等
优缺点
特点:
程序存储,共享数据,顺序执行
属于顺序处理机,适合确定的算法和数值数据的处理。
不足:
与存储器间有大量数据交互,对总线要求很高;
执行顺序由程序决定,对大型复杂任务较困难;
以运算器为核心,处理效率较低;
由PC控制执行顺序,难以进行真正的并行处理。
不足,指令执行过程,取数取指令共用总线,中间必须要等待
而如今数据交互需要越来越大型了,通道,总线的要求都越来越高;
大型任务对算法的要求越来越大,而其中可能并不会需要那么清晰的明确的算法
运算器核心,内存→CPU→输出,以及CPU,内存,接口的传输,
而只要需要软件参与,速度就大大受限了,直接硬件的操作才足够迅速
程序计数器只有一个,很难并行处理
哈佛结构
指令和数据分别存放在两个独立的存储器模块中
CPU与存储器间指令和数据的传送分别采用两组独立的总线;
可以在一个机器周期内同时获得指令操作码和操作数。
大型机微型机的改进型结构/哈佛结构:指令和运算数据分开存储,分开通道
数制及其转换
人类最习惯的计数制是十进制
计算机由具有两种状态的开关器件组成,可以用0和1分别表 示两种不同的状态 二进制
计算机中采用二进制
计算机硬件唯一能够识别的是二进制数。
任何其它计数制和各种信息要让计算机处理,都需要借助软件 转换为二进制。
0,1是计算机唯一能识别的,其他程序都要搞成这两个东西
进制统一表示
对任意一种计数制,都可以用以下权展开式表示:
(S)k=Sn−1×Kn−1+Sn−2×Kn−2+⋯+So×K0+S−1×K−1+⋯+S−m×K−m=∑i=−mn−1Si×Ki\begin{aligned} (S)_{k} &=S_{\mathrm{n}-1} \times K^{n-1}+S_{n-2} \times K^{n-2}+\cdots+S_{\mathrm{o}} \times K^{0}+S_{-1} \times K^{-1} \\ &+\cdots+S_{-m} \times K^{-m} \\ &=\sum_{i=-m}^{n-1} S_{i} \times K^{i} \end{aligned} (S)k=Sn−1×Kn−1+Sn−2×Kn−2+⋯+So×K0+S−1×K−1+⋯+S−m×K−m=i=−m∑n−1Si×Ki
十进制表示法
特点:
以十为底,逢十进一;
共有0-9十个数字符号。用D (decimal) 代表。
(D)10=Dn−1×10n−1+Dn−2×10n−2+⋯+D1×101+D0×100+D−1×10−1+⋯+D−m×10−m(D)_{10}=D_{n-1} \times 10^{n-1}+D_{n-2} \times 10^{n-2}+\cdots+D_{1} \times 10^{1}+D_{0} \times 10^{0}+D_{-1} \times 10^{-1}+\cdots+D_{-m} \times 10^{-m}(D)10=Dn−1×10n−1+Dn−2×10n−2+⋯+D1×101+D0×100+D−1×10−1+⋯+D−m×10−m
=∑i=−mn−1Di×10i=\sum\limits_{i=-m}^{n-1} D_{i} \times 10^{i}=i=−m∑n−1Di×10i
一般没有标识就默认十进制数字,即便在计算机中也是,二进制要末尾B,十六进制H,八进制O
二进制表示法
特点:
以2为底,逢2进位;
只有0和1两个符号。用B (binary) 表示。
表示:
(B)2=Bn−1×2n−1+Bn−2×2n−2+…+B0×20+B−1×2−1+…+B−m×2−m=∑i=−mn−1Bi×2i\begin{aligned}(B)_{2} &=B_{\mathrm{n}-1} \times 2^{n-1}+B_{n-2} \times 2^{n-2}+\ldots+B_{0} \times 2^{0}+B_{-1} \times 2^{-1}+\ldots+B_{-m} \times 2^{-m} \\ &=\sum_{i=-m}^{n-1} B_{i} \times 2^{i} \end{aligned}(B)2=Bn−1×2n−1+Bn−2×2n−2+…+B0×20+B−1×2−1+…+B−m×2−m=i=−m∑n−1Bi×2i
引入十六进制八进制的理由?
原本一万也就五位数,换算成二进制会有17位,第一眼看上去绝对搞不清大小,书写还相当不方便
2×2×2就是八种状态,再乘一个就是十六种,如果原本那个巨大的二进制数字分4位一组,每组一个数字表示,就有了十六进制
十进制数10000的二进制表示: 11000011010100000\begin{aligned} &\text { 十进制数10000的二进制表示: }\\ &11000011010100000 \end{aligned} 十进制数10000的二进制表示: 11000011010100000
十六进制表示法
- 特点:
有0 -9及A -F共16个数字符号 - 逢16进位。用H (hex) 表示
表示:
(H)16=Hn−1×16n−1+Hn−2×16n−2+…+H0×160+H−1×16−1+…+Hm×16−m(H)_{16}=\boldsymbol{H}_{n-1} \times 16^{n-1}+\boldsymbol{H}_{\mathrm{n}-2} \times 16^{n-2}+\ldots+\boldsymbol{H}_{0} \times 16^{0}+\boldsymbol{H}_{-1} \times 16^{-1}+\ldots+\boldsymbol{H}_{m} \times 16^{-m}(H)16=Hn−1×16n−1+Hn−2×16n−2+…+H0×160+H−1×16−1+…+Hm×16−m
=∑i=−mn−1Hi×16i=\sum\limits_{i=-m}^{n-1} \boldsymbol{H}_{i} \times 16^{i}=i=−m∑n−1Hi×16i
八进制表示法
特点:
有0 -7共8个数字符号
逢8进位,用O (octal) 表示。
表示:
(O)8=On−1×8n−1+On−2×8n−2+…+O0×80+O−1×8−1+…+O−m×8−m=∑i=ηn−1oi×8i\begin{aligned}(O)_{8} &=\boldsymbol{O}_{n-1} \times 8^{n-1}+\boldsymbol{O}_{\mathrm{n}-2} \times 8^{n-2}+\ldots+\boldsymbol{O}_{0} \times 8^{0}+\boldsymbol{O}_{-1} \times 8^{-1}+\ldots+\boldsymbol{O}_{-m} \times 8^{-m} \\ &=\sum_{i=\eta}^{n-1} \boldsymbol{o}_{i} \times 8^{i} \end{aligned}(O)8=On−1×8n−1+On−2×8n−2+…+O0×80+O−1×8−1+…+O−m×8−m=i=η∑n−1oi×8i
进制转换
非十进制数到十进制数的转换:按相应的权表达式展开
例:
1011.11B =1×23+0×22+1×21+1×20+1×2−1+1×2−2=8+2+1+0.5+0.25=11.75\begin{array}{l} \text { 1011.11B } \\ =1 \times 2^{3}+0 \times 2^{2}+1 \times 2^{1}+1 \times 2^{0}+1 \times 2^{-1}+1 \times 2^{-2} \\ =8+2+1+0.5+0.25=11.75 \end{array} 1011.11B =1×23+0×22+1×21+1×20+1×2−1+1×2−2=8+2+1+0.5+0.25=11.75
5B.8H5 \mathrm{B} .8 \mathrm{H}5B.8H
=5×161+11×160+8×16−1=5 \times 16^{1}+11 \times 16^{0}+8 \times 16^{-1}=5×161+11×160+8×16−1
=80+11+0.5=91.5=80+11+0.5=91.5 =80+11+0.5=91.5
十进制数到非十进制数的转换
对二进制的转换:
对整数:除2取余;
对小数:乘2取整。
对十六进制的转换:
对整数:除16取余;
对小数:乘16取整。
对八进制的转换:
对整数:除8取余;
对小数:乘8取整。
小数如果乘不完,按一定精度保留位数即可。
当然也可以以一种配凑的方法搞出来,
将十进制数48.25转换为二进制数。(32 16 8 4 2 1 有的写1,反之写0)
48=32+16=25+2448=32+16=2^5+2^448=32+16=25+24对应次方+1就是放1的格子位置,至于后面的16,8进制也可以以这种方式弄成2进制,而2进制转化成别的,例如2→8,只需要化成多个8的指数相加,看几次幂,对应n+1位置前写1即可。
而小数点后,例如0.25就是2−22^{-2}2−2,这是转十进制,反过来对应位置的负的次幂,就能推算十进制。
110000.01
十六进制数与二进制的转换
用4位二进制数表示1位十六进制数
整数部分,从小数点向左组,每4位一组,不角4位的高位补0。小 数部分,从小数点向右分组,不够4位的在低位补0。
例 :
25.5=11001.1B=00011001.1000B=19.8H25.5=11001.1 \mathrm{B}=00011001.1000 \mathrm{B}=19.8 \mathrm{H}25.5=11001.1B=00011001.1000B=19.8H
八进制数与二进制的转换
用3位二进制数表示1位八进制数
整数部分,从小数点向左组,每3位一组,不够3位的高位补0。 小数部分,从小数点向右分组,不够3位的在低位补0。
例:
11001010.0110101B=(312.324)O11001010.0110101 B=(312.324) O11001010.0110101B=(312.324)O
由于之前说过的,十六进制和八进制本质是吧二进制四个分组或三个分组构成,因此把八进制当成421,十六进制当成8421,很容易拆和。
总结
四种计数制
四种计数制的转换
计算机中的编码
编码
信息从一种需要由计算机处理的形式或格式转信息,换为另都需要一种形编码式的过程
用代码来表示各种信息,以便于计算机处理。
需要编码的信息种类:数值、字符、声音、图形、图像。
所有需要由计算机处理的信息都需要编码。使所有信息都用二进制码表示。
10010110.1001B=()BCD10010110.1001 \mathrm{B}=(\quad) \mathrm{BCD}10010110.1001B=()BCD
编码种类
数值编码:二进制码、BCD码
西文字符编码:ASCII码
标准ASCII是128个,范围是0x00-0x7F (0000 0000~0111 0000) ,最高位为0。
Unicode
中国汉字编码:GBK
0x8140-0xFEFE,首字节在 0x81-0xFE 之间,尾字节在 0x40~0xFE 之间,剔除 xx7F 一条线。
全球统一编码表:Unicode
由于全部采用双字节表示会浪费很多存储空间,于是有部分0x0000 到 0x007F 是单字节UTF-8,有部分0x0080 到 0x07FF是双字节UTF-8,有部分0x8000 到 0xFFFF是三字节UTF-8(一般中文都在此区间),另外emoji是超过三字节
BCD码
BCD(Binary Coded Decimal) 码
- 用二进制表示的十进制数
- 特点:保留十进制的权,数字用0和1表示。
8421BCD编码:
用4位二进制码表示1位十进制数,每4位之间有一个空格
0000→0
0001→1
……
1001→9
1010一1111是非法BCD码,只是合法的十六进制数
BCD、十进制、二进制码转换
BCD码与十进制数之间存在直接对应关系
例:(100110000110.0011)BCD=986.3
BCD码与二进制的转换:先转换为十进制数,再转换二进制数; 反之同样。
例:0001 0001 0010 0101BCD=11.25 =(1011.01) B
存储方式(压缩BCD码 扩展BCD码)
以压缩BCD码形式存放:
用4位二进制码表示1位BCD码
一个存储单元中存放2位BCD数
以扩展BCD码形式存放
用8位二进制码表示1位BCD码.即高4位为0,低4位为有效位
每个存储单元存放1位BCD
10010110.1001B=()BCDА.000101010000.0101011000100101В.001001010000.0101011000100101C.000101010000.0101011000100100D.100101010000.0101011000100101\begin{aligned} &10010110.1001B =( )BCD\\ &А. 000101010000.0101011000100101\\ &В. 001001010000.0101011000100101\\ &C. 000101010000.0101011000100100\\ &D. 100101010000.0101011000100101\\ \end{aligned}10010110.1001B=()BCDА.000101010000.0101011000100101В.001001010000.0101011000100101C.000101010000.0101011000100100D.100101010000.0101011000100101
答案A,先转化成10进制,再化成BCD码
10010110.1001B=()BCD10010110.1001 \mathrm{B}=(\quad) \mathrm{BCD}10010110.1001B=()BCD
1F3DH=()D=()BCD1 \mathrm{F} 3 \mathrm{DH}=(\quad) \mathrm{D}=(\quad) \mathrm{BCD}1F3DH=()D=()BCD
ASCII码
西文字符编码:将每个字母、数字、标点、控制符用1Byte二进制码表示
其中::标准ASCII的有效位:7bit,最高位默认为0
ASCII码最早是128个,7位二进制码足以,但因为最小存储单元是8位,所以通常最高位为0
可以注意到从左数第一位(也就是第七位)都是0
A-F,对应高四位是0100→4
a-f,对应高四位是0110→6
0-9,高四位是0011→3
重点主要0-9和A-H,因为他们都是十六进制字符
奇偶校验(编码1的个数)
奇校验
加上校验位后编码中“1”的个数为奇数。
例: A的ASCII码是41H(1000001B)以奇校验传送则为 C1H(11000001B)
偶校验
加上校验位后 编码中“1”的个数为偶数。
上例若以偶校验传送,则为 41H
若以奇校验传送字母B,则B的ASCII=() H
前面已经看到了标准ASCII码实际上只有7位有效,因此才有了这个检验奇数偶数的可能
假设采用奇校验,而接收到00100010的信号,是正确的,那么最高一位就要自然补1
用于调节,使得1出现三次
计算机中数的表述与运算
计算机中的二进制数表示
数的表示方法
{定点数 {定点整数 定点小数 浮点数 \begin{aligned} &\left\{\begin{array}{l} \text { 定点数 }\left\{\begin{array}{l} \text { 定点整数 } \\ \text { 定点小数 } \end{array}\right. \\ \text { 浮点数 } \end{array}\right. \end{aligned}⎩⎨⎧ 定点数 { 定点整数 定点小数 浮点数
定点数的缺点如下
(1) 编程时需要确定小数点位置;
(2) 难以表示两个大小相差较大的数
(3) 存储空间利用率低
对于人来说,加法首先要确定小数点的位置,对计算机来说这个过程比较麻烦,而且如果一个程序中同时涉及到天体直径和原子直径的数量计算,将会难以表示,要么就会浪费很大的空间。
而浮点数,由于小数点不固定,可以节省空间,计算更快
浮点数
浮点数:小数点的位置可以左右移动的数
规格化浮点数:尾数部分用纯小数表示,即小数,点右边第1位不为0
如果不做规范化处理,3.5就会有3.5×10,0.35×102,等等一系列的表示方法,如果规定小数点后第一个必须是1(二进制),就唯一确定了
阶码和尾数都有符号位。尾数体现精度,阶码决定表示范围
浮点数表示范围变大了,且由于格式化处理,占用空间更小,比定点数要快两个数量级
数的性质
{无符号数 有符号数 \left\{\begin{array}{l} \text { 无符号数 } \\ \text { 有符号数 } \end{array}\right.{ 无符号数 有符号数
数中所有的0和1都是数据本身
而有符号数需用0或1表示数的性质 (整数或负数)
各种编码多视为无符号数,数值则视为有符号数,他们都是二进制数
对于人来说,可以用±号区分,但是电脑只能识别01,所以也只能用01表示符号,0表示正数,1表示负数
1+1=0有进位,0-1=1有借位
乘法只有0和1,按照小学十进制乘法列写下来,我们就会发现实际上就是个移位和加法的结合
无符号数
无符号数的算术运算
加法运算:1+1=0(有进位)
减法运算:0-1=1(有借位)
乘法运算
除法运算
例:
00001011×0100=00101100B00001011 \times 0100=00101100 \mathrm{B}00001011×0100=00101100B
00001011÷0100=00000010B00001011 \div 0100=00000010 \mathrm{B}00001011÷0100=00000010B
商 =00000010 B
余数=11B
0100实际上就是4,也就是乘以两个2
每乘以2,相对于被乘数向左移动1位
每除以2,相对于被除数向右移动1位
乘数是2或者2的整数次方,每一个2就相当于左移一位,右侧不离;除法就是右移一位,左侧不离
放在10进制里,乘10左移,除10右移,也是一样的,很好理解
无符号数的所有01都有数值意义
有符号数
有符号数:用最高位表示符号,其余是数值(最高位0: 表示正数1 : 表示负数)
符号数的表示方法:原码 反码 补码
数的性质由设计者决定
在低级语言程序设计中,根据数的性质由程序语言处理(按无符号数或有符号数处理)。
底层无法知道是unsigned还是signed,低级语言中,可以根据数的性质由程序语言处理,高级语言中,例如c语言中,可以直接变量定义unsigned。
原码(True form)
最高位为符号位,其余为真值部分。
[X]原 =\mathrm[{X}]_{\text {原 }}=[X]原 = 符号位+ | 绝对值 |
优点:真值和其原码表示之间的对应关系简单,容易理解;
缺点:计算机中用原码进行加减运算比较困难,并且0的表示不唯一。
8位数0的原码:+0=00000000, -0=10000000,数0的原码不唯一。
反码(ones’ complement)
对一个机器数X:
若 X>0,\mathrm{X}>0,X>0, 则 [X]反 =[X]原[\mathrm{X}]_{\text {反 }}=[\mathrm{X}]_{\text {原}}[X]反 =[X]原
若 X<0,\mathrm{X}<0, \quadX<0, 则 [X]反 =\quad[\mathrm{X}]_{\text {反 }}=[X]反 = 对应原码的符号位不变,数值部分按位求反。
例:
X=−52=−0110100\mathrm{X}=-52=-0110100X=−52=−0110100
[X]原 =1‾0110100[\mathrm{X}]_{\text {原 }}=\underline{1}0110100[X]原 =10110100
[X]反 =1‾1001011[\mathrm{X}]_{\text {反 }}=\underline{1}1001011[X]反 =11001011
[+0]反=[+0]原 =00000000[+0]_{反}=[+0]_{\text {原 }}=00000000[+0]反=[+0]原 =00000000
[−0]原 =10000000[-0]_{\text {原 }}=10000000[−0]原 =10000000
[−0]反 =[−0]原数值部分分按位取反=111111111[-0]_{\text {反 }}=[-0]_{\text {原数值部分分按位取反}=111111111}[−0]反 =[−0]原数值部分分按位取反=111111111
即:数0的反码也不是雉一的。
补码(two’s complement)
定义:
若 X>0,则 [X]补 =[X]反 =[X]原 若 X<0,则 [X]补 =[X]反 +1\begin{array}{ll}\text { 若 } \mathrm{X}>0, & \text { 则 }[\mathrm{X}]_{\text {补 }}=[\mathrm{X}]_{\text {反 }}=[\mathrm{X}]_{\text {原 }} \\ \text { 若 } \mathrm{X}<0, & \text { 则 }[\mathrm{X}]_{\text {补 }}=[\mathrm{X}]_{\text {反 }}+1\end{array} 若 X>0, 若 X<0, 则 [X]补 =[X]反 =[X]原 则 [X]补 =[X]反 +1
X=−52=−0110100\mathrm{X}=-52=-0110100X=−52=−0110100
[X]原 =10110100[\mathrm{X}]_{\text {原 }}=10110100[X]原 =10110100
[X]反 =11001011[\mathrm{X}]_{\text {反 }}=11001011[X]反 =11001011
[X]补 =[X]反 +1=11001100[\mathrm{X}]_{\text {补 }}=[\mathrm{X}]_{\text {反 }}+1=11001100[X]补 =[X]反 +1=11001100
O的补码:
[+0]补 =[+0]原 =00000000[+0]_{\text {补 }}=[+0]_{\text {原 }}=00000000[+0]补 =[+0]原 =00000000
[−0]补=[−0]反+1=1111111+1=1‾00000000\begin{aligned} [-0]_{补}=[-0]_{反}+1 &=1111111+1 \\ &=\underline{1} \mathbf{0 0 0 0 0 0 0 0} \end{aligned}[−0]补=[−0]反+1=1111111+1=100000000
对8位字长, 进位被舍掉
原码和反码的0还是不唯一,只有补码搞定了这个问题,但也是通过忽略溢出的方式完成的,也就是类似于时钟进位的方式
补码的说明
钟表例:
将指针从5点拔到1点
两钟拔法:
逆时钟拔:5-4=1
顺时钟拔: 5+8=12+1=15+8=12+1=\mathbf{1}5+8=12+1=1(12为模,自动丢失)
对模12,有:
5-4=5+8(8和-4互补)
[−4]补 =12−4=8[-4]_{\text {补 }}=12-4=8[−4]补 =12−4=8
即5-4=5+(-4)=5+(12-4)=5+8=12+1
而对于八位二进制数,由于后7位实际起作用,模是128,换算成二进制就是个取反操作
但是补码是以溢出为代价的,至于溢出的1,如果想保留,之后可以自行写程序。
算术运算
有了补码就可以将减法运算转化为加法运算
[X+Y]补 =[X]补 +[Y]补 [\mathrm{X}+\mathrm{Y}]_{\text {补 }}=[\mathrm{X}]_{\text {补 }}+[\mathrm{Y}]_{\text {补 }}[X+Y]补 =[X]补 +[Y]补
[X−Y]补 =[X+(−Y)]补 =[X]补 +[−Y]补 [\mathrm{X}-\mathrm{Y}]_{\text {补 }}=[\mathrm{X}+(-\mathrm{Y})]_{\text {补 }}=[\mathrm{X}]_{\text {补 }}+[-\mathrm{Y}]_{\text {补 }}[X−Y]补 =[X+(−Y)]补 =[X]补 +[−Y]补
如果相加为正,不用管,因为正数的三码都一样,如果为负,就把超出的一位转存到某个地方。
例
66−51=66+(−51)=1566-51=66+(-51)=1566−51=66+(−51)=15
用二进制补码运算:
[+66]补 =[+66]原 =01000010[+66]_{\text {补 }}=[+66]_{\text {原 }}=01000010[+66]补 =[+66]原 =01000010
[−51]原=10110011[-51]_{\text {原}}=10110011[−51]原=10110011
[−51]补 =11001101[-51]_{\text {补 }}=11001101[−51]补 =11001101
[+66]补 +[−51]补 =100001111=15[+66]_{\text {补 }}+[-51]_{\text {补 }}=100001111=15[+66]补 +[−51]补 =100001111=15
X‾=−52=−0110100,Y=116=+1110100,\underline{X}=-52=-0110100, \quad Y=116=+1110100, \quadX=−52=−0110100,Y=116=+1110100, 求 X+Y=?X+Y=?X+Y=?
[X]原=10110100[\mathrm{X}]_{\text {原}}=10110100[X]原=10110100
[X]补 =[X]反 +1=11001100[\mathrm{X}]_{\text {补 }}=[\mathrm{X}]_{\text {反 }}+1=11001100[X]补 =[X]反 +1=11001100
[Y]补 =[Y]原 =01110100[\mathrm{Y}]_{\text {补 }}=[\mathrm{Y}]_{\text {原 }}=01110100[Y]补 =[Y]原 =01110100
[X+Y]补 =[X]补 +[Y]补 [\mathrm{X}+\mathrm{Y}]_{\text {补 }}=[\mathrm{X}]_{\text {补 }}+[\mathrm{Y}]_{\text {补 }}[X+Y]补 =[X]补 +[Y]补
=11001100+01110100=11001100+01110100=11001100+01110100
=01000000\quad=01000000=01000000
X+Y=+1000000\mathrm{X}+\mathrm{Y}=+1000000X+Y=+1000000
现代计算机系统中,程序设计时,负数可用“_”表 示,由编译系统将其转换为补码。
例:
若输入数= -3
程序编译后的值=FDH
FD也就是15和13,也就是1111 1101,取反1000 0010,加一,就是-3
1000 0000
对无符号数:
(10000000)B=128(1000 0000)_{\mathrm{B}}=128(10000000)B=128
在原码中定义为:
(10000000)B=−0(1000 0000)_{\mathrm{B}}=-0(10000000)B=−0
在反码中定义为:
(10000000)B=−127(1000 0000)_{\mathrm{B}}=-127(10000000)B=−127
在补码中定义为:
(10000000)B=−128(1000 0000)_{\mathrm{B}}=-128(10000000)B=−128
原码范围-127~+127(1111 1111-0111 1111)
反码范围-127~+127(1000 0000-0111 1111)
补码范围-128~+127(1000 0000-0111 1111)之所以补码多了一个,就是因为原本的0是两个东西,但其实是一个,现在被占用的位置放出来了,也就是1000 0000被解放了
计算机能力的局限性
计算机的运算能力是有限的
- 计算机无力解决无法设计出算法的问题
- 无法处理无穷运算或连续变化的信息
无法设计算法的问题,由图灵模型指出
另外由于只有加操作,以及有限的内存,无穷是无法表示的
计算机能够表示的数(表数)的范围是有限的
- 计算机的表数范围受字长的限制
例: 对8位机:
- 无符号数的最大值:1111 1111
- 有符号正数的最大值:0111 1111
当运算结果超出计算机表数范围时,将产生溢出
无符号整数的表示范围
当计算机中数的运行结果超出表数范围时, 则产生溢出。
无符号整数的表数范围:
0⩽X⩽2n−1\quad 0 \leqslant X \leqslant 2^{n-1} \quad0⩽X⩽2n−1 n表示字长
无符号数加减运算溢出的判断方法:
当最高位向更高位有进位(或借位) 时则产生溢出(只看最高位)
例如,两个8位数的加法运算
11111111+000000011‾00000000\begin{array}{r} 11111111 \\ +00000001 \\ \hline \underline{1}00000000 \end{array}11111111+00000001100000000
最高位向前有进位,产生溢出,溢出位超出8位有效字长,在有效字长范围内,结果为0,出错
有符号整数的表示范围
原码和反码:
−(2n−1−1)⩽X⩽2n−1−1-\left(2^{n-1}-1\right) \leqslant X \leqslant 2^{n-1}-1−(2n−1−1)⩽X⩽2n−1−1
补码:
−2n−1⩽X⩽2n−1−1-2^{n-1} \leqslant X \leqslant 2^{n-1}-1−2n−1⩽X⩽2n−1−1
对8位二进制数:
原码: −127∼+127-127 \sim+127−127∼+127
反码: −127∼+127-127 \sim+127−127∼+127
补码 :−128∼+127:-128 \sim+127:−128∼+127
符号数运算中的溢出判断
两个有符号二进制数相加或相减时,若运算结果超出可表达范围,则产生溢出
溢出的判断方法:最高位进位状态⊕\oplus⊕次高位进位状态=1,则结果溢出
除法运算溢出时,产生"除数为0"中断
乘法运算无溢出问题(因为8位×8位,变成16位,总在区间范围里可以表示)
若 :X=01111000,Y=01101001: \mathrm{X}=01111000, \quad \mathrm{Y}=01101001:X=01111000,Y=01101001则X+Y为
01111000+0110100111100001\begin{array}{r} 01111000 \\ +\quad 01101001 \\ \hline 11100001 \end{array}01111000+0110100111100001
次高位向最高位有进位,而最高位向前无进位,产生溢出。 (事实上,两正数相加得出负数,结果出错)
无符号数,只需要考虑最高位,进位或者借位就溢出了
有符号数就是,最高位和次高位,状态相同就不是溢出,不同就溢出了,也就是异或关系
但是考虑的都是加减而非乘除,因为乘除不存在溢出,乘就是扩展新的存储单元,除就是中断表示(后面会讲)
符号二进制数与十进制数的转换
转换方 法:求出真值再进行转换
计算机中的符号数默认以补码形式表示。
原码=符号位+绝对值
正数的补码=原码=符号位+绝对值
∵\because∵ 负数的补码≠原码
∴\therefore∴ 负数的补码=符号位+绝对值
[X]补 =0‾0101110B⟶X=+101110B=+46[\mathrm{X}]_{\text {补 }}=\underline{\mathbf{0}} 0101110 \mathrm{B} \longrightarrow \mathrm{X}=+101110 \mathrm{B}=+46[X]补 =00101110B⟶X=+101110B=+46
[X]补 =11010010B⟶X≠−1010010B⟶欲求X真值, 需 对[ X]补再取补[\mathrm{X}]_{\text {补 }}=11010010 \mathrm{B} \longrightarrow \mathrm{X} \neq-1010010 \mathrm{B} \longrightarrow \begin{array}{l}\text { 欲求X真值, 需 } \\ \text { 对[ } \mathrm{X}]_{\text {补}}{再取补 }\end{array}[X]补 =11010010B⟶X=−1010010B⟶ 欲求X真值, 需 对[ X]补再取补
X=[[X]补 ]补 =[11010010J补 =−0101110=−46\mathrm{X}=\left[[\mathrm{X}]_{\text {补 }} ]_{\text {补 }}=\left[11010010 \mathrm{~J}_{\text {补 }}=-0101110=-46\right.\right.X=[[X]补 ]补 =[11010010 J补 =−0101110=−46
注意不是按位取反再减一,因为就是钟表那种模的周期的关系,但是计算机里只会一直按位取反加一。
对正数:
补码=反码=原码,且 原码=符号位+真值
所以:正数补码的数制部分为真值
因正数的反码、补码与其对应的原码相同,故其数值部分亦为真值。
对负数:
补码≠反码≠原码
所以:负数补码的数制部分≠真值
只有原码的数值部分是真值
反码和补码的数值部分都不是真值
基本逻辑运算与逻辑门
逻辑
逻辑
- 是思维规律,事物因果之间所遵循的规律。
- 逻辑的基本表现形式是命题和推理
命题
- 能判断真假的陈述语句
不能是问句
推理
- 从前提推出结论的思维过程
- 前题是已知的命题,结论是通过推理规则得出的命题
(1) 2+3=5 真命题
(2) 3是偶数→假命题
(3) 明天上午有课吗? →不是命题
(4) 3不是偶数 →非(否定)
(5) 小明既学过英语,也学过德语 →并(同时)
(6) 从西安到北京经郑州走,或者经太原走 →或者
复合命题可以由简单命题通过“联结词”所表示的运 算得到。
命题是逻辑的基本表现形式,所以,“联结词”所表示的运算就是逻辑运算。
“并非” → “非”运算
“并且” → “与”运算
“或者” → “或”运算
命题的“真”和“假”可以对应为
物理上:开关的“断开”和“闭合”, 电平的“高”和“低”,
数学上:二进制的“1”和“0”
现代计算机由各种逻辑器件构成,数学基础是逻辑代数
逻辑运算/布尔代数
逻辑代数由英国数学家乔治・布尔发明
主要研究和判断相关的运算 一逻辑运算
用字母表示变量,变量的取值只有0和1
“0”对应“假”
“1”对应“真”
逻辑运算:
- 用符号来表示命题及其联结关系。
- 例如:命题“小明既学过英语,也学过德语”可以符号化为 A and B 表示
(A和B同时发生)
表示两个命题之间具有的逻辑关系 一一真值表
基本逻辑运算:
- “与”、“或”、“非”
ABY000010100111\begin{array}{lll} \mathbf{A} & \mathbf{B} & \mathbf{Y} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{1} & \mathbf{0} \\ \hline \mathbf{1} & \mathbf{0} & \mathbf{0} \\ \mathbf{1} & \mathbf{1} & \mathbf{1} \\ \hline \end{array} A0011B0101Y0001
与
“与”运算
仅当输入条件全部为“真”时,输出的结果为“真” 若输入条件有一个为“假”,则输出结果为“假”
“与”运算符号:
“.”, “∧\wedge∧”
若用1表示“真”,用0表示“假”,则与规则:
1∧1=11∧0=01 \wedge 1=1 \quad1 \wedge 0=01∧1=11∧0=0
0∧1=00∧0=00 \wedge 1=0 \quad 0 \wedge 0=00∧1=00∧0=0
在电路中,与运算相当于开关的串联电路,仅当所有开关都闭合时,电路才通电。
与门(AND gate)
对多个逻辑变量执行“与”运算的门电路
假设二极管管压降为0.3V。只要一个二极管没导通,电路就是阻断的。
输 λ(V)输出 (V)vAvBvY000.3050.3500.3555\begin{array}{ccc}\text { 输 } \lambda(\mathbf{V}) & \text { 输出 }(\mathbf{V}) \\ \mathbf{v}_{\mathbf{A}} & \mathbf{v}_{\mathbf{B}} & \mathbf{v}_{\mathbf{Y}} \\ \mathbf{0} & \mathbf{0} & \mathbf{0 . 3} \\ \mathbf{0} & \mathbf{5} & \mathbf{0 . 3} \\ \mathbf{5} & \mathbf{0} & \mathbf{0 . 3} \\ \mathbf{5} & \mathbf{5} & \mathbf{5}\end{array} 输 λ(V)vA0055 输出 (V)vB0505vY0.30.30.35
转换成输入输出的逻辑关系便是
输入 输 出 ABY000010100111\begin{array}{lll}\text { 输入 } & & \text { 输 出 } \\ \mathbf{A} & \mathbf{B} & \mathbf{Y} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{1} & \mathbf{0} \\ \mathbf{1} & \mathbf{0} & \mathbf{0} \\ \mathbf{1} & \mathbf{1} & \mathbf{1}\end{array} 输入 A0011B0101 输 出 Y0001
或
“或"运算
- 输入条件中有一个为“真”,则输出的结果为“真”
- 仅当输入条件全部为“假”时,输出结果才为“假”
“或”运算符号: “+”, " V "
“或”运算规则:
0∨0=00∨1=11∨0=11∨1=10 \vee 0=0 \quad 0 \vee 1=1\\ 1 \vee 0=1 \quad1 \vee 1=10∨0=00∨1=11∨0=11∨1=1
电路中,“或”运算相当于开关的并联电路,仅当所有开关都断开时,电路才无电流通过。
或门电路(OR gate)
对多个逻辑变量执行“或”运算的门电路
输入输出电压关系
输入 输 出 VA(V)VB(V)VY(V)000054.7504.7554.7\begin{array}{ccc}\text { 输入 } & & \text { 输 出 } \\ \mathbf{V}_{\mathbf{A}}(\mathbf{V}) & \mathbf{V}_{\mathbf{B}}(\mathbf{V}) & \mathbf{V}_{\mathbf{Y}}(\mathbf{V}) \\ \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{5} & \mathbf{4 . 7} \\ \mathbf{5} & \mathbf{0} & \mathbf{4 . 7} \\ \mathbf{5} & \mathbf{5} & \mathbf{4 . 7}\end{array} 输入 VA(V)0055VB(V)0505 输 出 VY(V)04.74.74.7
输入输出逻辑关系
输入 输 出 ABY000011101111\begin{array}{lll}\text { 输入 } & & \text { 输 出 } \\ \mathbf{A} & \mathbf{B} & \mathbf{Y} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{1} & \mathbf{1} \\ \mathbf{1} & \mathbf{0} & \mathbf{1} \\ \mathbf{1} & \mathbf{1} & \mathbf{1}\end{array} 输入 A0011B0101 输 出 Y0111
非
“非”运算:
当决定事件结果的条件满足时,事件不发生。
非”属于单边运算,只有一个运算对象,运算符为一条上横线。
可以表示为: A=B‾\mathrm{A}=\overline{\mathrm{B}}A=B
“非”运算电路的表示:
- 当开关断开时灯亮 ; 开关闭合时灯灭。
非门电路(NOT gate)
对单个逻辑变量进行“非”运算
F=A‾\mathrm{F}=\overline{\mathrm{A}}F=A
输入 输出 AF0110\begin{array}{|c|c|} \hline \text { 输入 } & \text { 输出 } \\ \hline \mathrm{A} & \mathrm{F} \\ \hline 0 & 1 \\ \hline 1 & 0 \\ \hline \end{array} 输入 A01 输出 F10
非门实际上就是按位取反,且是单个逻辑变量取反
逻辑运算与数学运算的区别: 算术运算是两个数之间的运算,低位运算结果将对高位运算产生影响;逻辑运算是按位进行的运算,低位运算结果对高位运算不产生影响
“与”门的输入端有1位为低电平(0) 时,则输出为“0”
“或”门的输入端有1位为高电平 (1) 时,则输出为“1”
这时候称两个门被封锁,因为别的位不再能影响输出了,一个就够了。
与非
“与”运算 + “ 非”运算 → “与非”运算
逻辑关系
A⋅B‾或者 A∧B‾\begin{array}{lll}\overline{\mathbf{A}{\cdot} \mathbf{B}} & \text { 或者 } &\overline{ \mathbf{A} \wedge \mathbf{B}}\end{array}A⋅B 或者 A∧B
读作A与B非
与非门
将与门的输出接入非门的输入, 构成 “与非门”
与非逻辑真值表
ABF001011101110\begin{array}{|ccc|} \hline \mathbf{A} & \mathbf{B} & \mathbf{F} \\ \hline \mathbf{0} & \mathbf{0} & \mathbf{1} \\ \mathbf{0} & \mathbf{1} & \mathbf{1} \\ \mathbf{1} & \mathbf{0} & \mathbf{1} \\ \mathbf{1} & \mathbf{1} & \mathbf{0} \\ \hline \end{array} A0011B0101F1110
相与取反,非的符号今后在电路图中就用一个小圈圈表示了
或非
“或”运算 + “非”运算 → “或非”运算
逻辑关系
A+B‾或者 AVB‾\begin{array}{lll}\overline{\mathbf{A}+\mathbf{B}} & \text { 或者 } & \overline{\mathbf{A V B}}\end{array}A+B 或者 AVB
读作A加B非
或非门
将或门的输出接入非门的输入,构成“或非门”
或非逻辑真值表
ABF001010100110\begin{array}{|ccc|} \hline \mathbf{A} & \mathbf{B} & \mathbf{F} \\ \hline \mathbf{0} & \mathbf{0} & \mathbf{1} \\ \mathbf{0} & \mathbf{1} & \mathbf{0} \\ \mathbf{1} & \mathbf{0} & \mathbf{0} \\ \mathbf{1} & \mathbf{1} & \mathbf{0} \\ \hline \end{array} A0011B0101F1000
“与非门”及“或非门”均为多输入单输出的门电路
可实现多个变量的“与非”或者“或非”运算
设: A=10101010,A=10101010,A=10101010, B=11110000
计算: F=A⋅‾B=?F=A+B‾=?\quad F=\overline{A·} B=? \quad F=\overline{A+B}=?F=A⋅B=?F=A+B=?
10101010∧1111000010100000\begin{array}{r} 10101010 \\ \wedge 11110000 \\ \hline 10100000 \end{array}10101010∧1111000010100000
10100000‾=01011111\overline{10100000}=0101111110100000=01011111
10101010V1111000011111010\begin{array}{r} 10101010 \\ V 11110000 \\ \hline 11111010 \end{array}10101010V1111000011111010
11111010‾=00000101\overline{11111010}=0000010111111010=00000101
异或
“异或”逻辑关系是在与、或、非3种基本逻辑运算基础上的变换。
异或逻辑的布尔代数表达式:
F=A‾⋅B+A⋅B‾=A⊕B\mathbf{F}=\overline{\mathbf{A}} \cdot \mathbf{B}+\mathbf{A} \cdot \overline{\mathbf{B}}=\mathbf{A}\oplus \mathbf{B}F=A⋅B+A⋅B=A⊕B
“异或”运算是两个变量的运算
运算规则:相同则为0。相异则为1。
异或完全就是为了表示进位和借位而生的,完全为了配合加法运算而存在,如果把二进制加法看成是数值运算和进借位两部分,进借位这部分,就用异或表示
异或门
对输入的两个逻辑变量执行“异或”运算的门电路
异或门是两输入单输出的门电路
异或逻辑真值表
ABF000011101110\begin{array}{|ccc|} \hline \mathbf{A} & \mathbf{B} & \mathbf{F} \\ \hline \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{1} & \mathbf{1} \\ \mathbf{1} & \mathbf{0} & \mathbf{1} \\ \mathbf{1} & \mathbf{1} & \mathbf{0} \\ \hline \end{array} A0011B0101F0110
同或
“同或”运算是在“异或”运算的基础上再进行“非”运算的结果。
同或运算的布尔表达式:
F=Aˉ⊕BF=\bar{A} \oplus B F=Aˉ⊕B
“同或”运算是两个变量的运算
运算规则:相同则为 1 。相异则为0。
同或门
对输入的两个逻辑变量执行“同或”运算的门电路
同或逻辑真值表
ABF001010100111\begin{array}{|ccc|} \hline \mathbf{A} & \mathbf{B} & \mathbf{F} \\ \hline \mathbf{0} & \mathbf{0} & \mathbf{1} \\ \mathbf{0} & \mathbf{1} & \mathbf{0} \\ \mathbf{1} & \mathbf{0} & \mathbf{0} \\ \mathbf{1} & \mathbf{1} & \mathbf{1} \\ \hline \end{array} A0011B0101F1001
F=Aˉ⋅B+A⋅Bˉ=A⊕BF=A⊕B‾\begin{array}{l} F=\bar{A} \cdot B+A \cdot \bar{B}=A \oplus B \\ F=\overline{A \oplus B} \end{array}F=Aˉ⋅B+A⋅Bˉ=A⊕BF=A⊕B
思考:用与、或、非基本逻辑门构造异或门和同或门。
微机原理及应用->微型计算机基础绪论相关推荐
- 由巨型计算机到微型计算机,微机原理第一章节:基础知识.ppt
微机原理第一章节:基础知识 * * * * * * * * * * * * * * * * * * * * * * * * 微型计算机原理 与接口技术 中原工学院电子信息学院 (电子教案) 总 目 录 ...
- 微型计算机与巨型计算机相比,.微机原理第一章:基础知识.ppt
微机原理第一章:基础知识 * * * * * * * * * * * * * * * * * * * * * * * * 微型计算机原理 与接口技术 中原工学院电子信息学院 (电子教案) 总 目 录 ...
- 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
微机原理及其应用 微型计算机温度控制系统设计课程设计报告 <微机原理及其应用>课程设计报告 2011年3月2日 课程设计题目及系统功能介绍 微型计算机温度控制系统设计,假设工业现场温度范围 ...
- 微型计算机温度控制系统设计,微机原理及其应用微型计算机温度控制系统设计课程设计报告;...
<微机原理及其应用微型计算机温度控制系统设计课程设计报告;>由会员分享,可在线阅读,更多相关<微机原理及其应用微型计算机温度控制系统设计课程设计报告;(20页珍藏版)>请在人人 ...
- 计算机术语new一个,微机原理第一章计算机基础知识(new)
<微机原理第一章计算机基础知识(new)>由会员分享,可在线阅读,更多相关<微机原理第一章计算机基础知识(new)(47页珍藏版)>请在人人文库网上搜索. 1.1.第一章计算机 ...
- 微型计算机原理存储器寻址,微机原理存储器部分 微型计算机原理及应用教材.ppt...
微机原理存储器部分 微型计算机原理及应用教材.ppt * 某计算机的主存为3KB,则内存地址寄存器需______位就足够了. 12 在某一存储系统中,设有只读存储器10KB,随机存储器54KB,使用1 ...
- 汇编语言与微机原理(1)基础知识
前言 (1)本人使用的是 王爽老师的汇编语言第四版和 学校发的微机原理教材配合学习. (2)推荐视频教程 通俗易懂的汇编语言(王爽老师的书): 贺老师C站账号网址: (3)文章配套资料: Github ...
- 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告...
微型计算机温度控制系统设计 <微机原理及其应用>课程设计报告 2011年3月2日 一.课程设计题目及系统功能介绍 微型计算机温度控制系统设计,假设工业现场温度范围为 0~75℃,温度值经传 ...
- 单片微型计算机概念及组成,中国民用航空飞行学院2014年微机原理与接口考研复习大纲...
中国民用航空飞行学院硕士研究生入学考试 801<微机原理与接口>复习大纲 第一部分 考试说明 一. 考试性质 <微机原理与接口>是中国民用航空飞行学院硕士生入学考试科目之一. ...
最新文章
- 常见的计算机系统结构不包括,计算机系统结构
- Qt Creator使用调试助手
- 打印矩阵 java_【Java】 剑指offer(29) 顺时针打印矩阵
- php生成有复杂结构的excel文档
- 计算机基础 英文版本,计算机基础,全英文版的.ppt
- 机器学习实战(8):局部加强线性回归LWLR
- 一年换7家公司,95后跳槽多疯狂
- VMware Workstation Pro 导出OVF模板
- IOS 高德地图导航
- Oracle索引详解
- 服务器系统如何设置屏幕保护,在windows中要设置屏幕保护程序可以使用控制面板的什么功能?_网站服务器运行维护,windows,屏幕保护程序,控制面板...
- ThinkPHP5 引入 Go AOP
- 《查理·芒格:人类误判心理学》
- 如何有效防止“蹭网”——简述Wi-Fi加密方式与破解
- java并发free-coder
- 复变函数 | 第一部分 复数
- 也来谈谈“为什么中国的程序员总被称为码农?”
- Linux下Rsync+sersync实现数据实时同步
- 不要被约束的意思_不想被束缚的说说
- 响应式微服务_低风险整体式微服务演进第二部分