第2章-计算机系统中的数据表示方法_第1页
第2章-计算机系统中的数据表示方法_第2页
第2章-计算机系统中的数据表示方法_第3页
第2章-计算机系统中的数据表示方法_第4页
第2章-计算机系统中的数据表示方法_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章计算机系统中

数据的表示方法

1本章学习目标了解计算机中数据的表示方法掌握各种数制之间的转换方法理解计算过程中溢出和精度误差导致的计算错误2本章学习目标熟悉流行的字符编码方法了解数据在计算机内存、磁盘中的保存、通信方式了解误码和纠错的概念32.1概述4字节:数据基本单元=8bit=1byte存储器最小可寻址单位(addressable)

例如:11010011位:最基本单元(bit)数字电路中的开或关;电压的“高”“低”2.1概述5字:连续的若干个字节构成一个字

一个字可以是任意位或字节,但习惯上是字节的偶整数倍2、4、8bytes4位被称为半字节(nibble)因此,一个字节可分为高半字节+低半字节2.1概述62.2位置编码系统72.2位置编码系统二进制称为以2为基的计数系统10进制是以10为基的计数系统,相邻位置的大小相差10倍任何整数都可以使用任意基数精确地表示出来8基数:计数体系中的有效数字个数称为基数.

例如10进制计数体系0,1,2,…,9,基数是10。二进制基数是?92.2位置编码系统位置编码系统(权重编码系统):按照数的位置,任意数字的值都可以表示成基数的乘幂形式.

例如:234.5610=2×102+3×101+4×100+5×10-1+6×10-2102.2位置编码系统110012=1

24+1

23+0

22+0

21+1

20=16+8+0+0+1=25计算机中数制2进制编程书写的数制10进制16进制8进制2进制2.2位置编码系统11图2.1计算机中常用数制2.2位置编码系统122.3十进制和二进制之间的转换132.3十进制和二进制之间的转换计算机采用二进制计数,是其他进制的基础,所以必须熟练掌握.掌握二进制计数系统有助于理解计算机中各个部件的工作原理以及指令集体系结构14数制之间有两种转换方法:减数法(subtractionmethod):直观但麻烦除数取余法(divisionremaindermethod):较为简单2.3十进制和二进制之间的转换15减数法举例19010=?32.3十进制和二进制之间的转换

结果:19010=21001316除数取余法19010=?32.3十进制和二进制之间的转换17

结果:19010=210013十进制数转换成任意x进制数

除x取余,从下向上练习:10410

二进制除2取余2.3十进制和二进制之间的转换18答案:110100022.3十进制和二进制之间的转换19二进制转换成十进制:

∑位值×位权举例:101100112179

倍乘转换法100100111470010011248183672146+0+0+1+0+0+1+1249183673147×2×2×2×2

×2x2x22481836721462.3十进制和二进制之间的转换20分数的转换:十进制数转换成任意x进制数:

乘x取整,从上到下举例:0.8125二进制?

0.11012.3十进制和二进制之间的转换21

注意:整数可用任意进制表示,而分数有可能不被完全表示。

如(0.5)10=(0.1)2,在3进制中就无法表示尽.2.3十进制和二进制之间的转换22练习:0.3437510?22.3十进制和二进制之间的转换23答案:0.3437510

0.0101122.3十进制和二进制之间的转换24二进制数较长,读起来较麻烦,例如:110101000110112=1359510常用8进制(Octal)或16进制(hexadecimal)数表示2进制数:8进制0,1,2,3,4,5,6,716进制0~9,A,B,C,D,E,F28:三位一组,直接写出216:四位一组,直接写出2.3十进制和二进制之间的转换25举例:28:三位一组,直接写出

216:四位一组,直接写出2.3十进制和二进制之间的转换26练习:10110111.10010128:三位一组,直接写出216:四位一组,直接写出2.3十进制和二进制之间的转换27答案010,110,111.100,1012=267.458

1011,0111.1001,01002=B7.9416

2.3十进制和二进制之间的转换28292.4带符号整数的表示方法带符号整数二进制在计算机中有两种表示方法:符号符值表示法:符号位+数值大小补码表示法(2的补码表示法Two’scomplement)302.4带符号整数的表示方法

符号幅值表示法

符号(1=负,0=正)+幅值.

例如-127=11111111+127=01111111

表数范围=-(2N-1-1)~+(2N-1-1)312.4带符号整数的表示方法例如:+3

00000011-3

10000011

举例:用符号符值计算二进制数75+46322.4带符号整数的表示方法75符号单列46从右到左,逢2进1

上例中需要仔细保证不发生溢出,下面是一个溢出的例子:332.4带符号整数的表示方法10746107+46=25显然错误下面是两个负数相加的例子,加完之后再把负号加上:342.4带符号整数的表示方法-46-25再观察下面的例子:01001111(79)+00100011(35)=01110010=114无溢出01001111(79)+01100011(99)=00110010(50)有溢出01100011(99)-01001111(79)=00010100(20)无溢出10101011(-43)-10011000(-24)=10010011(-19)无溢出352.4带符号整数的表示方法通过上述例子,得到如下结论:符号符值表示法用计算机实现过程复杂,容易出错。例如:(1)符号相同,幅值相加,结果可能溢出;(2)符号相反,判断哪一个较大,较大的在前减去较小的,符号与较大的相同。(3)做减法时需要借位,计算机电路硬件实现起来困难;(4)做加法时需要进位,符号位可能会被冲掉,导致不可估量的错误。特别注意到:符号符值表示法中有两个值都表示0,+0和-0,易出乱子怎么办?引入补码体系:diminishedradixcomplementsystem

362.4带符号整数的表示方法补码体系古代算术“计算9的个数”理论167-52==167+(999-52)(减数的十进制反码)+(最高位的进位1)=167+947=1114+1=115372.4带符号整数的表示方法最高位的进位1北京

铁岭

16711510000833947111452+1推广到二进制数01111011(123)-01110101(117)=123+(-117)=123+(-117)反码+1(-117的反码=11111111-01110101)=01111011+100001010+1=00000110(+6)优点:简化了计算机的计算,不再需要单独处理符号位,而仅需要检测符号位。382.4带符号整数的表示方法反码表示法(1的补码表示法One’scomplement)

基数为r的数N,有d位数字,则其反码定义为(rd-1)-N.

例如:2468=9999-2468=7531二进制基数是r=2,8位数N有d=7位数字,所以其反码是(27-1)-N。特别地:二进制反码=原码直接逐位求反,简单易得。例如:10101100

除去符号位外,逐位取反11010011对于数字电路来说极易实现!392.4带符号整数的表示方法例:利用反码表示法求48-19402.4带符号整数的表示方法48-19反码反码表示法的不足:仍然有+0和-0表示问题-0=1000000原码=11111111反码+0=00000000每次计算完后还要+1别忘了最高位的进位加回来。补码表示法(2的补码表示法Two’scomplement)

正数的补码=原码

负数的补码=反码+1(电路也容易实现)例如:

+23=+(00010111)=(00010111)补-23=-(00010111)=11101000+1=(11101001)补

(注意,连同符号位一起取反再+1)对称地:负数的原码=补码+1

412.4带符号整数的表示方法利用补码表示法计算48-19422.4带符号整数的表示方法48-19只需要两个数相加并抛弃最高位的进位补码表示法检测溢出的方法很简单:进入符号位和移出符号位的进位相等,就没有溢出发生,否则有溢出发生。例如107+46产生了溢出:432.4带符号整数的表示方法进入符号位移出符号位107460补码计算过程:负数转换为补码形式参与运算运算是否有溢出发生,仅需要对进位和符号位做“异或”检测。442.4带符号整数的表示方法直观地:两个负数相加结果为正;两个正数相加结果为负,都有溢出产生。例2-21没有溢出,例2-22有溢出

补码表示法如何解决+0和-0问题?

8位二进制数采用补码表示法的取值范围是-128~+127这是补码表示法中特有的,即在补码表示法中所表示的数值范围具有非对称性,比其他表示方法的表数范围多出了一个-128值。

-128的补码是:(-128)=(10000000)求补=(01111111)+1=1000,0000

这个值就是-0,与+0=00000000不同.452.4带符号整数的表示方法

2.5浮点表示法46

2.5浮点表示法47

上述都是关于整数数据的表示方法,现实中不能只用整数表示数据。许多数据需要用小数表示。答案:浮点表示法

2.5浮点表示法48

早期程序员利用整数也可以编写进行浮点数运算的程序,称为浮点仿真程序。但现今大多数计算机都提供了浮点运算硬件,免去了编程的麻烦。浮点数表示类似于科学计数法,科学计数法由三部分组成:符号、尾数和指数。49

2.5浮点表示法指数的底是10计算机记录一个浮点数也由三部分组成,排列如下:符号、指数和尾数50

2.5浮点表示法(mantissa)51

2.5浮点表示法符号位指出了数值的正负;指数部分的长度决定了表数范围的大小;尾数部分的长度决定了表数的精度例如:IEEE-754单精度浮点标准:32位IEEE-754双精度浮点标准:64位52

2.5浮点表示法小数点始终默认位于尾数的前面,所以尾数是一个小数。指数通常默认是以2为底,也有以其他数为底的。53

2.5浮点表示法为了便于描述,我们以一个简单的14位模型为例:(mantissa)54

2.5浮点表示法例如:32=1.0×25

(科学计数法)=0.1×260.160正数下列表达方式代表了同一个数32:55

2.5浮点表示法+0.1×26+0.01×27+0.001×28+0.0001×29规律:小数点向左移,指数增大。一数多表的问题容易引起混乱,解决的方法是规格化,通常规定:尾数的第1位必须是1,称为规格化。56

2.5浮点表示法例如:规格化后17=0.10001×2557

2.5浮点表示法如何表达一个负指数?

例如0.312510=0.01012=0.101×2-1方法一,在指数部分设置一个符号位(不推荐采用)58

2.5浮点表示法方法二,利用偏移指数的概念:为了表达负指数,取指数部分表数范围的一个中间值作为偏移值,小于该偏移值的值是负数;大于该偏移值的是正数。有的书上称为“移码”。例如:5位指数最大表数范围32,因此取中间值16作为偏移值,注意到此时指数部分最小为0.0.25=0.1×2-1

偏移指数=偏移值+实际指数=16+(-1)=15实际指数=偏移指数-偏移值=15-16=-159

2.5浮点表示法例如:17=0.10001×25

偏移指数=16+5=21,所以表为:实际指数=偏移指数-偏移值=21-1660

2.5浮点表示法61

2.5浮点表示法练习:32如何用浮点数表达?(移码方式)62

2.5浮点表示法答案:32=0.1x26练习:下面表达的是什么数?63

2.5浮点表示法答案:32,0.0625,-26.625问题思考:如何表达0?程序员为什么要避免测试一个浮点数是否等于0.64

2.5浮点表示法IEEE754单精度浮点标准:偏移值12765

2.5浮点表示法S(1位)E(8位)M(23位)N(32位)表示的意义00±0数值0符0非0±0.M×(E-126)非规格化正常数值号1~254非0±1.M×(E-127)规格化正常数值位255非0NaN非数值,通常为错误指示2550±∞正负无穷大浮点加减法:1)浮点加法要把两个数的阶调整一致后再行相加(一般是大指数调小)最后指数再调整为10010,后两位被精度限制舍去!!66

2.5浮点表示法67

2.5浮点表示法练习:1210+1.2510=0.1100×24+0.101×21=0.1100×24+0.000101×24.68

2.5浮点表示法浮点乘法举例1210=0.1100x241.2510=0.101x21乘积:0.0111100×25=0.1111×24.69

2.5浮点表示法无论如何计算机中保存的数位是有限的,而实数是无限的,所以用浮点数表述数据总会存在误差。增加尾数的长度可以减小误差。关于浮点误差上面实例的表数范围:尾数全部填满11111111,指数全部填满-1111~+1111范围是:-11111111×215最小负数~+11111111×215其中的有效位数(尾数)仅有8位,不能表示诸如128.5=10000000.1之类的数据,因为该数长度超过了8位。

由此产生相对误差=(128.5-128)/128.5≈0.39%这种现象称为浮点误差。浮点误差在计算乘法时有传递放大效应。70

2.5浮点表示法图2.314位浮点数字中的误差传递71

2.5浮点表示法如何克服浮点误差?(1)增加有效位长度(2)操作数大小相近的数一起运算之后,再与其他数运算。例如:128.5+0.5+0.5+0.5+0.5,可先把后四个0.5先加,再与128.5相加。(3)有待研究72

2.5浮点表示法浮点数的上溢和下溢:上溢:太大,超出了最大表数范围下溢:太小,超出了最小数表数范围73

2.5浮点表示法74

2.5浮点表示法IEEE-754浮点标准单精度标准:32位=1位符号位+8位指数位(127余)+23有效位双精度标准:64位=1位符号位+11位指数位(1023余)+52有效位指数位=有效位=0表示0双精度标准的表数范围:21024=10308(1)负值:-1.0x10308~-1.0x10-308

(2)正值:1.0x10-308~1.0x1030875

2.5浮点表示法

2.6字符编码76结果只有被人理解才有意义。计算机必须能够保存、处理、显示人所能理解的内容,因此需要用到字符编码。772.6字符编码什么是字符编码?把现实世界中常用的数字、字母、符号、文字以及各种操作用计算机可表达的形式表示出来。782.6字符编码二进制编码十进制数(BCD编码)图2.5二进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论