当前课程知识点:微机原理与接口技术 > 第1周 微型计算机基础概论 > 第5讲 计算机中数的表示与运算 > 数的表示与运算
最后我们要说一下
有一个特殊的数
这个数作为八位字长
就是最高位是1
作为十六位字长嘛
就是最后
还是最高位是1
后面是十五个0
依次类推
这个数
作为无符号数
八为无符号数的话
它等于多少?
很容易得出来
最高位这个权值是2的7次方
所以
它等于128
这个没有任何问题
那么 对于
原码
大家已经知道
最高位是符号位
这是负的
那么是后面是绝对值
所以这个数
如果是原码的话
那么它是负0
如果是反码
它等于多少
我们永远记住
反码
只有原码的定义是
符号位加绝对值
反码和补码呢?
它们都是
原码基础上的
一种变换
所以当这个数
是负数的时候
反码和补码
都不等于
符号位加绝对值
也就是说符号位
还是符号位
但是后边的数值部分
已经是原码基础上的
一种变换
所以
它不再是绝对值的意思了
所以这个数
现在10000000
这个如果是反码的话
怎么样得到它的绝对值呢?
是要对这个数
再取反码
也就是把它各位取过来
反向过来
所以
反向过来嘛
就是8个1了
所以这个数
把符号位去掉
那就是2的7次方减1
所以如果它是反码的话
这个数等于
-127
这些
都有很多的道理
但是在补码中
我们定义它为-128
没有太多的道理
就是说也可能是
我们原码有正0负0
反码也有正0负0
而补码呢?
正0 负0都是一个0
都大家都归一了
所以就
相对来讲
空出一个位置
这个位置就给了它
就是负的一半28
如果一定要追根溯源
大家可以认为
它如果是无符号数的话
是128
这样得出来的
这是一个特殊的数
大家后面还会用到
所以我们今天
把它拿出来说一下
现在
我们介绍完了有关
无符号数
和有符号数
它们的表示
以及它们的运算的过程
下边我们要
提一个问题
因为计算机中
不管是早期的计算机
还是今天的计算机
不论是微型计算机
还是大型计算机
它都不可能
去处理无穷的数据
它处理的数据
都是有限的
也就是它的
一次处理的数据
和它的字长
是一致的
它的字长
也就是说它能够并行处理的
二进制的位数
我们现在课件上
举的这些例子
全部都是八位字长
那么
对于你今天的计算机
也都是64位的
也就是说它能够
同时处理64位数
当然它比
处理8位数的效率
已经高的多了
因为如果我们
就是8位的计算机
要去处理两个64位数
我们要处理8次
才能处理完
就是两个64位相加
如果用8位计算机来加
我们要加8次
才能把这两个数加完
但是64位机
我们得加一次就加完
但是
不管它是8位还是64位
它总归它是有个极限 对吧
所以它有一个
能力的一个边界
计算机的能力
首先它是不能处理
我们无法
设计出算法的问题
这个是图灵模型
它所证明的问题
第二
它无法处理无穷的问题
所以
它能够处理的数据
都是
字长都是在有限的范围内
计算机能够表示的数
我们也称为表数
这个表数范围
或者它表示数的范围
它是有限的
这个
表数范围
刚才我们已经说了
它受到字长的限制
不论是8位的
还是16位的
它这个都是
16位的字长
就是64位的机器
它的字长是64位
所以它总归
它能够处理的
也就是64位数
所以表数范围受到
它的字长的限制
比如对于8位机
它最大能够表示的
就是八个1
这八个1是多少呢?
就是255
对于无符号数是这样
对于有符号数
我们刚才说
正数
就是最高位是0
剩下的七个1
就是正的127
负数
我们刚才已经定义了
刚才那个10000000 对吧
就是负的128
这是对于八位数来讲
十六位数
以此类推
大家可以去查阅一下资料
这些
不管是8位
16位
32位还是64位
总而言之
它的字长
决定了它能够
表达数据的范围的能力
这就是
计算机的能力的
一个边界
当你超出了
你的运算结果超出了
这样一个能力边界
就像刚才我们说的
8个1又加了1
这种时候会怎么样呢?
我们刚才说
因为那个1
是在更高位了
挤到我们有限的
8位字长这样一个范围
挤到外头去了
所以我们看不到了
那个挤到外头的
就是
就相当于你煮饭
那个饭已经
铺到锅外面去了
我们就叫做溢出
所以当运算结果
超出了我们这个
这个字长的范围
也就是说我们超出了
我们计算机的表示数的范围
表数范围的时候
我们就产生溢出了
溢出就有可能
带来一种错误
下面我们来
解决说一下这个问题
我们先来说一下无符号数
无符号数
是我们刚才说的里面
这个一个数里面
所有的0和1
都是有意义的数据
对于八位无符号数
最大的数就是
八位1
最小的数
就是八个0
那么所以
无符号数的表述范围
我们可以用这样一个
通用的表达式来表述
这里的n
表示是字长
就是说 我们看
如果这个n等于8
就是八位字长的话
这个八位无符号数
最小数是0
最大数是多少呢?
就是2的8次方减1
就是255
那么我们计算机
怎么知道
无符号数是溢出了
还是没有溢出呢?
计算机实际上不知道
它只是说
如果
8个1
再加1
对于8位机来讲
如果8个1再加1
怎么办呢?
它把最高进去的
进掉的那一个位
它会放在一个特有的地方
那么到底这个1
是溢出的
还是有用的
那个是需要程序员
通过语言去处理的
所以
但是它一定要反映给你
反映给你
它会用它特殊的一种方式
我们下一章就会讲到了
但是不管怎么样
如果出现这种情况
我们称为溢出
溢出怎么样
就会那个1
就会出现在那样一个地方
或者说怎么样就溢出了呢?
无符号数
溢出的判断方法
或者说
计算机判断它的方法
是最高位
向前有进位
或者减法有借位
大家
先注意一下
我在这里说的
是无符号数
加减运算的溢出方法
我们没有说乘除运算
有关乘除
我们后边来给大家解释
所以有符号数
无符号数
加减运算是不是溢出
它的判断方法
就是最高位
向前有没有进位
或者有借位
对于8位数来讲
就是第七位向更高位
有没有进位
或者借位
我们用一个例子
来说一下
假设这是我们八个1
再加1
最后得到的结果是这个
这就是最高位
就是第七位
向更高位有进位了
进掉的这一个位
我们就说是溢出了
这个溢出的位
超出了
8位有效的字长
在有效字长的范围内
我们看到的是8个1
所以
我们就说
8个1是255
255加1
我们结果得出0
这个结果显然是不对的
那么
你说我要
我就要算255+1怎么办
你去想办法
把那个进掉的那个1
就是溢出的那个1
要把它捞回来
不捞回来
这结果就错了
怎么捞回来?
我们后边课程
再去给大家介绍
那么对于有符号数
我们因为刚才说
我们有符号数
有三种表示方法
所以原码 反码和补码
它的表数范围
是不一样的
对于原码和反码
它的表数范围是这样
而对于补码呢?
因为刚才我们说了
补码的最小值
8位补码最小值
是-128
最大值是+127
所以补码的表数范围
通用的表达
可以是这样的一个表示方法
对于8位二进制数
我们
因为我们这门课
更多的用到是8位和16位
所以16位我在这里
就不再打出来了
大家自己可以去把它算一下
8位有符号数
它的表示范围
是这样子的一个范围
我们特意的
把补码的表数范围
用红颜色表述出来
因为未来
我们说
默认在计算机中
处理的数据
都是补码的形式
就是有符号数
都是补码的形式
所以它的表数范围
都是用这样子的一个表数范围
来描述
那么
因为无符号数
和有符号数
它的表数范围不一样
所以
它判断是不是溢出的方法
也就不一样
对于符号数
判断是不是溢出
我们要用双位
来表示
刚才我们说
有符号数
无符号数
它的是不是溢出
是用最高位向前
有没有进位
就是说一位来
最高这一位
来表述它是不是溢出
而有符号数
因为它的
表数范围不同
所以它是不是溢出
我们用最高两位
它的进位
或者借位状态
来描述它们
它的溢出方法
是这样
就是说最高位
和次高位这两位
它们的进位状态
或者说借位状态
不一样的时候
那么就溢出了
一样的时候
就没有溢出
所以我们用它们的
这种异或关系来表示
异或的意思就是
相同为0
相异为1 对吧
就是进位状态
都一样
就是都有进位
或者都没有进位
那么它们的异或
这种状态的异或就等于0
也就是进位状态相同
那么这个时候
就没有溢出
如果进位状态
一个有进位
一个没进位
那么它就溢出
这个是有符号数
是不是溢出的
一种判断方式
对于 我们
我们现在都说的是
加减运算
对于乘除运算
我们为什么没有说呢?
是因为
乘法运算
根本不牵扯
溢出问题
因为 我们
后边大家会知道
两个8位数相乘
结果16位
两个16位相乘
结果会变成32位
所以
它不出现这个溢出的问题
而除法的溢出
是
不是用这样子的方法来
来描述的
而是通过
一种叫做
中断的方式
来描述的
就是你的除法
溢出的时候
会引起系统
弹出一个
除数为0的
中断请求
那么这种概念
这里说了好几个名词
大家都还不太清楚
我们后边就会讲到它了
讲到这一点
所以
除法的溢出的方法
不是通过这样的方法
来反映的
而是通过
中断的方式
来反映给程序员的
而乘法
是没有溢出问题
所以我们现在
刚才说的这种
溢出的判断
针对的都是
加减运算的判断
我们
也同样做一个例子
现在假设
有这么一个X和Y
我们不管它的性质
我们现在就是
从已经到最底层
就是二进制
硬连逻辑这个层面上
我们大家就看
这样两个二进制数的求和
比如现在我们做X+Y
相加的结果
我们看看
0+1就等于1
0+0就等于0
就依次这样得到了
我们看
次高位向最高位
有进位吗?
有的 对吧
那么
最高位向更高位
也就第七位向第八位
请大家注意
最左边这一个
最右边这一位
是最低位
最低位是
从第0位算的
所以
最高这一位
我们叫第七位
现在次高位
向最高位
有进位
但是最高位向更高位
没有进位
也就是两个进位状态
不一样
所以
就溢出了
也就是说
这两个如果是
有符号数的话
它就溢出了
也很明显
大家看 如果是有符号数
两个都是正数
它们做加法运算
居然得出负数了
显然结果是不对的
但是如果这两个数
是无符号数
溢出了没有呢?
没有
因为最高位向更高位
没有进位
这个是
这个原因
就是归结到前边
因为无符号数
和有符号数的
表数范围不同
所以它们的
描述方法
也就不同
最后我们来说一下
有关符号数
符号二进制数
到十进制的转换问题
转换的时候
希望大家首先
一定要关注
首先要关注
要把
真值去转换
而不要把符号位去转换
符号位
我们就直接用
正或者负来表述
因为计算机中
默认的
都是以补码形式来表示的
而补码呢
我们已经知道
和原码
是不一样的概念
我们说原码的定义
是符号位加绝对值
而补码呢
是因为正数的补码
和原码相同
所以正数的补码
也就等于
符号位加绝对值
但是负数
它的补码和原码不一样
所以
负数
它就绝对不等于
负数的补码
就绝对不等于
符号位加绝对值了
这个千万要注意
这个推理的过程
大家注意了
因为
原码是符号位加绝对值
而正数的补码
因为它等于正数的原码
所以它就恰好
或者说碰巧
就等于
正数的补码
就等于了符号位加绝对值
而负数的补码
因为它不等于原码
所以
它就不等于
符号位加绝对值了
那么 所以
对于一个负数的补码
怎么样能得到它的绝对值呢?
我们下边用这个例子
来给大家解释一下
假设我们X的补码
等于这个值
因为最高位是0
所以它是个正数
对吧 这没有问题
所以 这个
它的原码也就等于它
它的真值
也就很容易就得出来了
就是把那个最高位
这个0用正号来表示
后面就是它的绝对值
所以这个绝对值
把它的权值表达式展开
得到它的
十进制数
很容易就得出来
等于46
那么 如果我们
假设X的补码
等于这样一个数
也就是最高位现在变成1了
是负的了
因为它是负数
刚才我们说了
负数的补码
不等于原码
所以现在后面这个1010010
就不是它的绝对值了
因此它的真值
就也就不是
这样的一个值了
我们怎么样能够得出来呢?
我们必须要对这样一个X
再去求它的补码
也就是说
对这个补码数
再去取补码
因为为什么
不是说是
按位取反减1呢?
就是因为我们这个是个
就像刚才前面
我们说的钟表的概念
它是一个模的概念
所以它一直
在它转换
在它还原的过程中
我们还是
要按照这样子的一个方式
对这个补码数再去补码
再去补码以后
得到的结果就是-46
这个是没有问题的
这个是
补码与十进制的
补码数和十进制的转换
请大家要注意一下
最后我们在总结一下
对于正数来讲
因为补码等于反码
等于原码
所以
它们都等于
符号位加绝对值
那么对于负数
因为补码和原码不一样
所以它们的绝对值
负数的补码
符号位后边
就不再是数的真值
也就是说不是它的绝对值
只有原码的数值部分
才是绝对值
而补码和反码的
数值部分
都不一定是绝对值
特别是负数
那是绝对不是绝对值
OK
我们有关这个
计算机中数的表示
和它们的运算
就介绍到这里
请大家特别的关注
有关补码的表示
以及它们的运算
还有
就是
有关无符号数
有符号数
它们的
溢出的问题
也就是怎么样去判断
它们是不是溢出了
最后
就是请大家
一定要关注
对于符号数
和十进制数之间的转换
要注意
它的数的性质
好 这一讲我们就到这里
-第1讲 关于本课程
--关于本课程
-第2讲 微型计算机系统
--微机系统_01
--微机系统_02
-第3讲 微型计算机一般工作过程
-第4讲 数制与编码
--计算机中的编码
-第5讲 计算机中数的表示与运算
--数的表示
--符号数的表示
--数的表示与运算
-第6讲 基本逻辑运算与逻辑电路
-第7讲 本周小结
--本周小结
-第1周 微型计算机基础概论--第一周单元测验
-第8讲 8088微处理器
-第9讲 8088 CPU主要引线及机构
-第2周 8088微处理器--第二周单元测验
-第10讲 实模式存储器寻址
-第11讲 8088系统总线
--8088系统总线
-第12讲 微处理器小结
--微处理器小结
-单元测验--作业
-第13讲 指令概述
--指令概述
-第14讲 寻址方式
--寻址方式
-第15讲 通用数据传送指令
-第16讲 地址传送指令
--地址传送指令
-第17讲 输入输出指令
--输入输出指令
-第4周 数据传送指令--第四周单元测验
-第18讲 算术运算指令
--加法运算指令
--减法指令
--乘除运算指令
-第19讲 逻辑运算指令
-第20讲 移位操作指令
--移位操作指令
-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验
-第21讲 关于串操作指令的说明
--串操作指令说明
-第22讲 串传送与串比较
--串传送与串比较
-第23讲 串扫描指令
--串扫描指令
-第24讲 串装入与串存储指令
-第六周单元测验--作业
-第25讲 程序控制指令说明
-第26讲 转移类指令
--无条件转移指令
--条件转移指令
-第27讲 循环控制指令
--循环控制指令
-第28讲 过程调用指令
--过程调用指令
-第29讲 中断指令
--中断指令
-第30讲 处理器控制指令
--处理器控制指令
-第31讲 指令系统小结
--指令系统小结
-第7周 程序与处理器控制--第七周单元测验
-第7周 程序与处理器控制--第七周作业
-第32讲 汇编语言源程序
-- 汇编语言源程序_01
-- 汇编语言源程序_02
-第33讲 伪指令
--数据定义伪指令
--其它伪指令
-第34讲 系统功能调用
-第35讲 汇编语言程序设计示例详解
--程序设计示例1
-第36讲 汇编语言程序设计小结
-第8周 汇编语言程序设计--第八周单元测验
-第8周 汇编语言程序设计--第八周作业
-第37讲 半导体存储器概述
--半导体存储器概述
-第38讲 内存单元编址
--存储单元编址
-第39讲 随机存取存储器RAM
-- RAM_01
--RAM_02
-第40讲 只读存储器ROM
--ROM_01
--ROM_02
-第九周单元测验--作业
-第41讲 半导体存储器扩展
--存储器扩展_2
-第42讲 半导体存储器小结
--半导体存储器小结
-第十周单元测验--作业
-第十周作业--作业
-第43讲 基本I/O接口
-第44讲 简单接口芯片
--简单接口芯片
-第45讲 基本输入输出方法
--基本I/O方法
-第46讲 简单I/O控制系统设计
-第47讲 中断技术
--中断技术1
--中断技术2
-第48讲 输入输出与中断技术小结
--本周小结
-第十一周单元测验--作业
-第49讲 可编程定时计数器
-第50讲 可编程并行接口
-第51讲 可编程接口小结
--本周小结_01
--本周小结_02
-第十二周单元测验
-第52讲 模拟量的输入输出
--模拟量的输入输出
-第53讲 D/A转换器
-第54讲 A/D转换器
-- A/D转换器_01
-第十三周单元测验--作业
-第55讲 I/O接口系统综合设计示例详解I
-第56讲 综合设计示例详解II
-第57讲 结束语
--结束语