13数据存储(DataStorage)2列出计算机中使用的五种数据类型.描述不同的数据如何以位模式存储在计算机中.描述整数如何以无符号格式存储在计算机中.描述整数如何以符号加绝对值格式存储.描述整数如何以二进制补码格式存储.描述实数如何以浮点格式存储在计算机中.描述文本如何通过各种不同的编码系统存储在计算机中.描述音频如何通过采样、量化和编码存储在计算机中.描述图像如何通过光栅和矢量图模式存储在计算机中.描述视频如何以图像随时间变化的表示来存储在计算机中.教学目标通过本章的学习,同学们应该能够:33-1引言INTRODUCTION如今,数据以不同的形式出现,如:数字、文本、音频、图像和视频(Figure3.1).Figure3.1不同类型的数据计算机中使用术语“多媒体”来定义包含数字、文本、图像、音频和视频的信息.i4计算机内部的数据Datainsidethecomputer所有计算机外部的数据都采用统一的数据表示法转换后存入计算机中,当数据从计算机输出时再还原回来。这种通用的格式称为位模式.Figure3.2位模式位(bit)是存储在计算机中的最小单位,0或1.为了表示数据的不同类型,采用位模式,一个序列长度为8的位模式称为1个字节(byte).书P29图3.2错误,16个位5Figure3.3不同数据类型的存储6数据压缩Datacompression数据压缩将在第15章讨论.i更小的空间存储更多的数据更短的时间下载更多的数据存储或发送更少的位数(数据)数据压缩73-2存储数字STORINGNUMBERS在存储到计算机内存中之前,数字被转换为二进制系统,如第二章所述.但是,这里还有两个问题需要解决:1.如何存储数字的符号.2.如何显示十进制小数点.8存储整数Storingintegers整数是完整的数字(即没有小数部分).如134和−125是整数,而134.23和−0.235则不是.整数可被当作小数点位置固定:小数点固定在最右边.因此,定点表示法用于存储整数,如图3.4所示.在这种假设中,小数点是假设的,但是并不存储.Figure3.4整数的定点表示法整数通常使用定点表示法存储在内存中.i9无符号表示法Unsignedrepresentation无符号整数就是没有符号的整数,范围介于0到无穷大.在n位存储单元中,可以存储的无符号整数为0~2n-1存储无符号整数的步骤:1.首先,将整数变成二进制数.2.如果二进制位数不足n位,则在二进制整数的左边补0,使它的总位数为n位.如果位数大于n位,则无法存储,导致溢出。10Example3.1将7存储在8位存储单元中.解:首先将整数转换为二进制数(111)2.左边加5个0使总位数为8位,即(00000111)2.再将该整数保存在存储单元中.注意:右下角的2用于强调该整数是二进制的,并不存储在计算机中.11Example3.2将258存储在16位存储单元中.解:首先将整数转换为二进制(100000010)2.左边加7个0使总位数满足16位,即(0000000100000010)2.再将该整数存储在存储单元中.12Example3.3当译解作为无符号整数保存在内存中的位串00101011时,从输出设备返回什么?解:使用第2章的解题过程,二进制整数转换为十进制无符号整数43.32+8+2+1=4313假如存储大于24−1=15的整数到仅为4位的内存中,会发生溢出的情况.Figure3.5无符号整数的溢出14无符号表示法的优势因为不必存储整数的符号,无符号整数可以提高存储效率,所有分配的位单元都可以用来存储数字。只要用不到负整数,都可以用无符号整数表示法。15无符号整数的应用计数:可以从0或1开始增加寻址:地址是从0(存储器的第一个字节)开始到整个存储器的总字节数的正数。为其他数据类型排序:其他数据类型(文本、图像、音频、视频)等是以位模式存储的,可以翻译为无符号整数。16符号加绝对值表示法Sign-and-magnituderepresentation在这种方法中,用于无符号整数的有效范围(0to2n−1)被分成2个相等的子范围.前半部分表示正整数,后半部分表示负整数.Figure3.6符号加绝对值的表示法符号加绝对值表示法中,最左位定义整数的符号。0表示正整数,1表示负整数.i17在一个8位存储单元中,可以仅用7位表示数字的绝对值(不带符号)最大的整数值,仅是无符号最大数的一半。在n位单元中,可存储的数字范围是:-(2n-1-1)~(2n-1-1)符号加绝对值表示法Sign-and-magnituderepresentation18Example3.4用符号加绝对值格式表示法将+28存储在8位存储单元中.解:先把该整数转换成7位的二进制数.最左边位置为0,即存储为8位数.19Example3.5用符号加绝对值格式表示法将-28存储在8位存储单元中.解:先把该整数转换成7位的二进制数。最左边位置为1,即存储为8位数.20Example3.6将用符号加绝对值格式表示法存储的01001101复原成整数.解:因为最左位是0,符号为正。其余位(1001101)转换成十进制数64+8+4+1=77加上符号后,该整数是+77.21Example3.7将用符号加绝对值格式表示法存储的10100001复原成整数解:因为最左位是1,符号为负。其余位(0100001)转换成十进制数32+1=33加上符号后,该整数是−33.错误:p32(书-17)22符号加绝对值表示法的应用符号加绝对值表示法不用于存储整数,而用于存储部分实数符号加绝对值表示法通常用于采样模拟信号,如音频。23二进制补码表示法几乎所有的计算机都使用二进制补码表示法来存储位于n位存储单元中的有符号整数。在补码表示法中,无符号整数的有效范围(0~2n−1)被分为2个相等的子范围。第一个子范围用来表示非负整数(0和正),第二个子范围用于表示负整数.若n=4,范围是0000~1111,分为两半,0000~0111和1000~1111,按左负右正的常规交换。(错:书P33)24Figure3.8二进制补码表示法在二进制补码表示法中,最左位决定符号。如果最左位是0,该整数为正如果最左位是1,该整数为负i赋值给负和非负整数的位模式如图3.8所示.25反码在介绍补码表示法之前,需要介绍两种运算第一种称为反码或取一个整数的反码.该运算可以应用到任何整数,无论是正的还是负的.该运算简单反转各个位.即把0位变为1位,把1位变为0位26Example3.8如何取整数00110110的反码?27Example3.9进行两次反码运算,就可以得到原先的整数.28补码第二种运算:称为二进制中的补码或取一个整数的补码。该运算分为两步:首先,从右边复制位,直到有1被复制,接着,反转其余的位.29Example3.10如何取整数00110100的补码?30Example3.11如果进行2次补码运算,就可以得到原先的整数.另一种将一个整数进行补码运算的方法是,先对它进行1次反码运算,再加上1得到结果。第4章i31Example3.12用二进制补码表示法将28存储在8位存储单元中.解:该整数是正数,因此,把该整数从十进制转换为二进制后不再需要其他操作.注意,3个多余的0加到该整数的左边使其成为8位.(错:书P34)32Example3.13用二进制补码表示法将整数−28存储在8位存储单元中.解:该整数是负数,因此,在转换成二进制后,计算机对其进行二进制补码运算.33Example3.14用二进制补码表示法将存储在8位存储单元中的00001101还原成整数.解:最左位是0,因此,符号为正.该整数需要转换为十进制并加上符号即可.34Example3.15用二进制补码表示法将存储在8位存储单元中的11100110还原成整数.解:最左位是1,因此符号为负.在整数转换成十进制前进行补码运算.35Figure3.9二进制补码表示法的溢出二进制补码表示法仅有1个0.i36比较37存储实数Storingreals实数是带有整数部分和小数部分的数字.例:23.7是一个实数,整数部分是23,小数部分是0.7.尽管固定小数点的表示法可以用于表示实数,但结果不一定精确或达不到需要的精度.带有很大的整数部分或者很小的小数部分的实数不应该用定点表示法存储.i38Example3.16在十进制系统中,假定用一种定点表示法,右边2个数码,左边14个数码,总计16个数码.如何表示十进制数1.00234?该系统的实数精度就会受损,该系统把这个数字存储为1.00.39Example3.17在十进制系统中,假定用一种右边6个数码,左边10个数码,总共16个数码的定点表示法.如何存储十进制数236154302345.00?该系统的实数精度就会受损,该系统把这个数字存储为6154302345.00整数部分比实际小了很多.40浮点表示法Floating-pointrepresentation用于维持正确度或精度的解决方法是使用浮点表示法.浮点表示法允许小数点浮动,小数点的左右可以有不同数量的数码,增加了可存储的实数范围.Figure3.9在浮点表示法中的三个部分浮点表示法由3部分组成:符号、位移量、定点数i41Example3.18在科学计数法中,定点部分在小数点左边只有1位,位移量是10的幂次。用科学计数法(浮点表示法)表示的十进制数7,425,000,000,000,000,000,000.00这三部分为:符号(+),位移量(21),定点数(7.425).注意:位移量就是指数.+7.425E2142Example3.19用科学计数法表示数字−0.0000000000000232这三部分为:符号(-)、位移量(-14)、定点数(2.32)注意:这里指数是负的.-2.32E-14解:将小数点移到数码2之后,如下所示:43Example3.20用浮点格式表示数字(101001000000000000000000000000000.00)2解:使用前例同样的方法,小数点前只保留一位数字.指数显示为32,实际上以二进制存储在计算机中。44Example3.21用浮点格式表示数字−(0.00000000000000000000000101)2解:小数点左边只留一个非零数码.45规范化Normalization为了使表示法的固定部分统一,科学计数法(用于十进制)和浮点表示法(用于二进制)都在小数点左边使用了唯一的非零数码,这称为规范化.十进制系统中该非零数码可能是1到9,二进制系统中该非零数码是1.在下面,d是非零数码,x是一个数码,y是0或1.46二进制数规范化之后,只存储了该数的三部分信息,符号,指数,尾数。+1000111.0101规范化后变为:符号:用一个二进制位来表示(0或1)指数:小数点移动的位数,使用余码表示法存储指数位尾数:小数点右边的二进制数,定义了该数的精度。注意:尾数不是整数,而是像整数那样存储的小数部分在尾数中,如果在数字左边插入多余的0,值将会改变而在真正的整数中,左边插入0,值不会改变书P38错误47小数点和定点部分左边的位1并没有存储,它们是隐含的.i48指数:是有符号的数,即显示多少位小数点应该左移或右移的幂次.在余码系统中,正整数和负整数都可以作为无符号数存储.为了表示正整数或负整数,将正整数(称为一个偏移量)添加到每个数字中,将它们统一移到非负的一边.这个偏移量的值是2m−1−1,m是内存单元存储指数的大小.余码系统ExcessSystem49Figure3.11余码表示法中的移位Example3.22可以用4位存储单元在数字系统中表示16个整数.在该范围中增加7个单位到每个整数中,可以统一把所有整数向右移,使其均为整数,而无需改变这些整数的相对位置,避免了相互调整,如图3-11所示.新系统称为余7码,或者偏移量为7的偏移表示法.50Figure3.12浮点表示法的IEEE标准IEEE标准51IEEE标准的规范52Example3.23写出