1、3 数据存储数据存储 (Data Storage)1 教学目标 通过本章的学习,同学们应该能够:?列出计算机中使用的五种数据类型.?描述不同的数据如何以位模式存储在计算机中.?描述整数如何以无符号格式存储在计算机中.?描述整数如何以符号加绝对值格式存储.?描述整数如何以二进制补码格式存储.?描述实数如何以浮点格式存储在计算机中.?描述文本如何通过各种不同的编码系统存储在计算机中.?描述音频如何通过采样、量化和编码存储在计算机中.?描述图像如何通过光栅和矢量图模式存储在计算机中.?描述视频如何以图像随时间变化的表示来存储在计算机中.2 3-1 引言 INTRODUCTION 如今,数据以不同的形
2、式出现,如:数字、文本、音频、图像和视频(Figure 3.1).i Figure 3.1 不同类型的数据 计算机中使用术语“多媒体”来定义包含数字、文本、图像、音频和视频的信息.3 计算机内部的数据 Data inside the computer 所有计算机外部的数据都采用统一的数据表示法转换后存入计算机中,当数据从计算机输出时再还原回来。这种通用的格式称为位模式.位(为了表示数据的不同类型,采用位模式,一个序列bit)是存储在计算机中的最小单位,0 或1.长度为8 的位模式称为1 个字节(byte).Figure 3.2 位模式 书P29 图3.2 错误,16 个位 4 不同数据类型的存
3、储 5 Figure 3.3 数据压缩 Data compression 更小的空间存储更多的数据 更短的时间下载更多的数据 存储或发送更少的位数(数据)数据压缩 i 数据压缩将在第15 章讨论.6 3-2 存储数字 STORING NUMBERS 在存储到计算机内存中之前,数字被转换为二进制系统,如第二章所述.但是,这里还有两个问题需要解决:1.如何存储数字的符号.2.如何显示十进制小数点.7 存储整数 Storing integers?整数是完整的数字(即没有小数部分).如134 和?125 是整数,而134.23 和?0.235 则不是.?整数可被当作小数点位置固定:小数点固定在最右边.
4、因此,定点表示法用于存储整数,如图 3.4 所示.?在这种假设中,小数点是假设的,但是并不存储.i Figure 3.4 整数的定点表示法 整数通常使用定点表示法存储在内存中.8 无符号表示法 Unsigned representation 无符号整数就是没有符号的整数,范围介于0到无穷大.在n位存储单元中,可以存储的无符号整数为 02n1 存储无符号整数的步骤:1.首先,将整数变成二进制数.2.如果二进制位数不足 n位,则在二进制整数的左边补0,使它的总位数为n位.如果位数大于n位,则无法存储,导致溢出。9 Example 3.1 将7 存储在8 位存储单元中.解:首先将整数转换为二进制数
5、(111)2.左边加5 个0 使总位数为8位,即(00000111)2.再将该整数保存在存储单元中.注意:右下角的 2用于强调该整数是二进制的,并不存储在计算机中.10 Example 3.2 将258 存储在16 位存储单元中.解:首先将整数转换为二进制 (100000010)2.左边加7 个0 使总位数满足16 位,即(0000000100000010)2.再将该整数存储在存储单元中.11 Example 3.3 当译解作为无符号整数保存在内存中的位串00101011时,从输出设备返回什么?解:使用第2 章的解题过程,二进制整数转换为十进制无符号整数43.32+8+2+1=43 12 假如
6、存储大于存中,会发生溢出的情况 24?1=15.的整数到仅为4 位的内 Figure 3.5 无符号整数的溢出 13 无符号表示法的优势 因为不必存储整数的符号,无符号整数可以提高存储效率,所有分配的位单元都可以用来存储数字。只要用不到负整数,都可以用无符号整数表示法。14 无符号整数的应用?计数:可以从0 或1 开始增加?寻址:地址是从0(存储器的第一个字节)开始到整个存储器的总字节数的正数。?为其他数据类型排序:其他数据类型(文本、图像、音频、视频)等是以位模式存储的,可以翻译为无符号整数。15 符号加绝对值表示法 Sign-and-magnitude representation 在这种
7、方法中,用于无符号整数的有效范围 (0 to 2n?1)被分成2 个相等的子范围.前半部分表示正整数,后半部分表示负整数.Figure 3.6 符号加绝对值的表示法 i 符号加绝对值表示法中,最左位定义整数的符号。0 表示正整数,1 表示负整数.16 符号加绝对值表示法 Sign-and-magnitude representation?在一个8位存储单元中,可以仅用 7位表示数字的绝对值(不带符号)?最大的整数值,仅是无符号最大数的一半。?在n位单元中,可存储的数字范围是:(2n11)(2n11)17 Example 3.4 用符号加绝对值格式表示法将存储单元中.+28 存储在8 位解:先把
8、该整数转换成7 位的二进制数.最左边位置为0,即存储为8 位数.18 Example 3.5 用符号加绝对值格式表示法将-28存储在8 位存储单元中.解:先把该整数转换成7 位的二进制数。最左边位置为1,即存储为8 位数.19 Example 3.6 将 用 符 号 加 绝 对 值 格 式 表 示 法 存 储 的01001101 复原成整数.解:因为最左位是0,符号为正。其余位(1001101)转换成十进制数 64+8+4+1=77 加上符号后,该整数是+77.20 Example 3.7 将 用 符 号 加 绝 对 值 格 式 表 示 法 存 储 的10100001复原成整数 解:因为最左位
9、是1,符号为负。其余位(0100001)转换成十进制数 32+1=33 加上符号后,该整数是?33.错误:p32(书17)21 符号加绝对值表示法的应用?符号加绝对值表示法不用于存储整数,而用于存储部分实数?符号加绝对值表示法通常用于采样模拟信号,如音频。22 二进制补码表示法 几乎所有的计算机都使用二进制补码表示法来存储位于n位存储单元中的有符号整数。在补码表示法中,无符号整数的有效范围 (02n?1)被分为2个相等的子范围。第一个子范围用来表示非负整数(0 和正),第二个子范围用于表示负整数.若n4,范围是00001111,分为两半,00000111和10001111,按左负右正的常规交换
10、。(错:书P33)23 赋值给负和非负整数的位模式如图 3.8 所示.Figure 3.8 二进制补码表示法 i 在二进制补码表示法中,最左位决定符号。如果最左位是0,该整数为正 如果最左位是1,该整数为负 24 反码 在介绍补码表示法之前,需要介绍两种运算 第一种称为反码或取一个整数的反码.?该运算可以应用到任何整数,无论是正的还是负的.?该运算简单反转各个位.即把0 位变为1 位,把1 位变为0 位 25 Example 3.8 如何取整数00110110的反码?26 Example 3.9 进行两次反码运算,就可以得到原先的整数.27 补码 第二种运算:称为二进制中的补码或取一个整数的补
11、码。该运算分为两步:?首先,从右边复制位,直到有1 被复制,?接着,反转其余的位.28 Example 3.10 如何取整数00110100的补码?29 Example 3.11 如果进行2 次补码运算,就可以得到原先的整数.i 另一种将一个整数进行补码运算的方法是,先对它进行1 次反码运算,再加上 1 得到结果。第4 章 30 Example 3.12 用二进制补码表示法将28 存储在8 位存储单元中.解:该整数是正数,因此,把该整数从十进制转换为二进制后不再需要其他操作.注意,3 个多余的0 加到该整数的左边使其成为8 位.(错:书P34)31 Example 3.13 用二进制补码表示法
12、将整数?28 存储在8 位存储单元中.解:该整数是负数,因此,在转换成二进制后,计算机对其进行二进制补码运算.32 Example 3.14 用二进制补码表示法将存储在 8位存储单元中的00001101还原成整数.解:最左位是0,因此,符号为正.该整数需要转换为十进制并加上符号即可.33 Example 3.15 用二进制补码表示法将存储在8位存储单元中的11100110还原成整数.解:最左位是1,因此符号为负.在整数转换成十进制前进行补码运算.34 i 二进制补码表示法仅有 1 个0.Figure 3.9 二进制补码表示法的溢出 35 36 比较 存储实数 Storing reals 实数是
13、带有整数部分和小数部分的数字.例:23.7 是一个实数,整数部分是 23,小数部分是 0.7.尽管固定小数点的表示法可以用于表示实数,但结果不一定精确或达不到需要的精度.i 带有很大的整数部分或者很小的小数部分的实数不应该用定点表示法存储.37 Example 3.16 在十进制系统中,假定用一种定点表示法,右边2 个数码,左边14 个数码,总计16 个数码.如何表示十进制数1.00234?该系统的实数精度就会受损,该系统把这个数字存储为 1.00.38 Example 3.17 在十进制系统中,假定用一种右边6 个数码,左边10 个数码,总共 16 个数码的定点表示法.如何存储十进制数 23
14、6154302345.00?该系统的实数精度就会受损,该系统把这个数字存储为 6154302345.00 整数部分比实际小了很多.39 浮点表示法 Floating-point representation 用于维持正确度或精度的解决方法是使用浮点表示法.浮点表示法允许小数点浮动,小数点的左右可以有不同数量的数码,增加了可存储的实数范围.i Figure 3.9 在浮点表示法中的三个部分 浮点表示法由3 部分组成:符号、位移量、定点数 40 Example 3.18 在科学计数法中,定点部分在小数点左边只有 1 位,位移量是 10 的幂次。用科学计数法(浮点表示法)表示的十进制数 7,425,
15、000,000,000,000,000,000.00 这三部分为:符号(+),位移量(21),定点数(7.425).注意:位移量就是指数.7.425E21 41 Example 3.19 用科学计数法表示数字?0.0000000000000232 解:将小数点移到数码2 之后,如下所示:这三部分为:符号注意:这里指数是负的(-)、位移量.(-14)、定点数(2.32)-2.32E-14 42 Example 3.20 用浮点格式表示数字 (101001000000000000000000000000000.00)2 解:使用前例同样的方法,小数点前只保留一位数字.指数显示为32,实际上以二进制
16、存储在计算机中。43 Example 3.21 用浮点格式表示数字?(0.00000000000000000000000101)2 解:小数点左边只留一个非零数码.44 规范化 Normalization 为了使表示法的固定部分统一,科学计数法(用于十进制)和浮点表示法(用于二进制)都在小数点左边使用了唯一的非零数码,这称为规范化.十进制系统中该非零数码可能是 1 到9,二进制系统中该非零数码是 1.在下面,d 是非零数码,x 是一个数码,y 是 0 或 1.45 二进制数规范化之后,只存储了该数的三部分信息,符号,指数,尾数。1000111.0101规范化后变为:符号:用一个二进制位来表示(
17、0 或1)指数:小数点移动的位数,使用余码表示法存储指数位 尾数:小数点右边的二进制数,定义了该数的精度。注意:尾数不是整数,而是像整数那样存储的小数部分 在尾数中,如果在数字 左边插入多余的0,值将会改变 而在真正的整数中,左边插入 0,值不会改变 书P38 错误 46 i 小数点和定点部分左边的位1 并没有存储,它们是隐含的.47 余码系统 Excess System 指数:是有符号的数,即显示多少位小数点应该左移或右移的幂次.在余码系统中,正整数和负整数都可以作为无符号数存储.为了表示正整数或负整数,将正整数(称为一个偏移量)添加到每个数字中,将它们统一移到非负的一边.这个偏移量的值是2
18、m?1?1,m是内存单元存储指数的大小.48 Example 3.22 可以用4 位存储单元在数字系统中表示 16 个整数.在该范围中增加 7个单位到每个整数中,可以统一把所有整数向右移,使其均为整数,而无需改变这些整数的相对位置,避免了相互调整,如图 3-11所示.新系统称为余7 码,或者偏移量为7 的偏移表示法.Figure 3.11 余码表示法中的移位 49 IEEE 标准 Figure 3.12 浮点表示法的IEEE标准 50 IEEE标准的规范 51 Example 3.23 写出十进制数5.75 的余127 码(单精度)表示法.解:a.符号为正,所以S=0.b.十进制转换为二进制:
19、5.75=(101.11)c.规范化:(101.11)22.2.d.E=2+127=129=(10000001)2=(1.01 11)2 使之成为2,M=0111.需要在M的右边增加19 个023 位.a.该表示法如下所示:书P39 错 存储在计算机中的数字是 01000000101110000000000000000000 52 Example 3.24 写出十进制数161.875的余127 码(单精度)表示法.解:符号为负,所以S=1.a.b.十进制转换为二进制:161.875=(10100001.111)2.c.规范化:(10100001.111)2=(1.0100001111)2 27
20、.d.E=7+127=134=(10000110)2,而 M=(0100001111)2.a.该表示法如下所示:存储在计算机中的数字是 书P40 错 1100001100 1000011110000000000000 53 Example 3.25 写出十进制数解:0.0234375的余 127码(单精度)表示法a.S=1(该数为负).b.十进制转换为二进制:0.0234375=(0.0000011)2.c.规范化:(0.0000011)2=(1.1)2 2?6.d.E=6+127=121=(01111001)2 and M=(1)2.e.该表示法如下所示:存储在计算机中的数字是 101111
21、00110000000000000000000000 54 Example 3.26 位模式(11001010000000000111000100001111)2 以余 127码格式存储于内存中.求该数字十进制计数法的值.解:a.首位表示S,后8 位表示E,剩下 23 位是 M.b.符号为负号.c.位移量=E?127=148?127=21.d.将(1.00000000111000100001111)2 221去规范化.e.二进制数是(1000000001110001000011.11)2.f.绝对值是2,104,378.75.g.该数字是?2,104,378.75.55 存储0 Storing
22、 Zero 带有整数和小数部分的实数设置为0 的时候是0.0,无法用以上讨论的步骤存储.为了处理这个特例,约定在这种情况下,符号、指数、尾数都设为0.56 3-3 存储文本 STORING TEXT 在任何语言中,文本的片段是用来表示该语言中某个意思的一系列的符号。例如,英语中使用26 个符号(A,B,C,Z)表示大写字母,26 个符号(a,b,c,z)表示小写字母,10个符号(0,1,2,9)表示数字字符,以及符号(.,?,:,;,!)表 示标点.书P41 错 另外一些符号(如空格 blank、换行newline、制表符tab)被用于文本的对齐和可用性.57 可以用位模式表示任何一个符号.换
23、句话说,如四个符号组成的文本 “CATS”,可以采用4 个n位模式(n-bit patterns)表示,任何一个模式定义一个单独的符号 (图 3.14).Figure 3.14 利用位模式表示符号 58 59 代码 Codes?ASCII:美国国家标准协会ANSI开发了一个被称为美国信息交换标准码 ASCII的代码,该代码使用7 位表示每个符号。?Unicode:硬件和软件制造商联合起来共同设计了一种名为 Unicode 的代码,这种代码使用 32位并能表示最大达232=4294967296个符号。?其他编码:最近几十年来,其他编码不断发展,鉴于Unicode 的优势,这些编码不太流行。见附录
24、 A 60 3-4 存储音频 STORING AUDIO 音频表示声音或音乐.音频本质上与数字和文本是不同的.文本由可数的实体(文字)组成:可以数出文本中文字的数量.文本是数字数据digital data 的一个例子.相反,音频是不可数的.音频是模拟数据analog data的例子.即使能够在一段时间内度量所有的值,也不能把它全部存在计算机内存中,因为可能需要无限数量的内存单元.61 图3.15 显示了一个模拟音频信号随时间变化的本质 Figure 3.15 一个音频信号 62 采样 Sampling 如果不能记录一段间隔的音频信号的所有值,至少可以记录其中的一些。采样意味着在模拟信号上选择数
25、量有限的点,来度量它们的值,并记录下来。Figure 3.16 一个音频信号的采样 63 量化 Quantization 从每个样本测量得到的值是真实的值.这意味着要为每秒的样本存储 40000个真实值.但是,为每个样本使用一个无符号的数(位模式)会更简便.量化指的是将样本的值截取为最接近整数值的一种过程.例如,如果实际的值为17.2,就可截取为17;如果实际的值为 17.7,就可截取为18.64 编码 Encoding 量化的样本值需要被编码成位模式.一些系统为样本赋正值或负值,另一些仅仅移动曲线到正的区间从而只赋正值.称每样本位的数量(位深度bit depth)为B,每秒样本数为S,则需要
26、为每秒的音频存储 SB位,该乘积称为位率R(bit rate).例如,如果使用每秒 40,000个样本,每样本16 位,位率是 R=40,000 16=640,000 bits per second 65 声音编码标准 Standards for sound encoding 当今音频编码的主流标准是MP3(MPEG Layer 3的简写).该标准是用于视频压缩方法的MPEG(Motion Picture Experts Group 运动图像专家组)标准的一个修改版.它采用每秒44100个样本以及每样本16 位.结果信号达到705,600b/s(bits per second)的位率 再使用那
27、些人耳无法识别的信息的压缩方法进行压缩.这是一种有损压缩,与无损压缩相反,参见第 15 章.66 3-5 存储图像 STORING IMAGES 存储在计算机中的图像使用两种不同的技术:光栅图或矢量图.光栅图Raster graphics 当需要存储模拟图像如照片时,就用到了光栅图或位图.一张照片由模拟数据组成,类似于音频信息.不同的是数据密度 (色彩)因空间变化,而不是因时间变化.这意味着数据需要采样.然而,这种情况下,采样通常被称作扫描.样本称为像素(代表图像的元素).67 解析度Resolution 类似音频采样,在图像扫描中,要决定对每英寸的方块或线条需要记录多少像素.在图像处理中的扫
28、描率称为解析度.若解析度足够高,人眼不会看出在重现图像中的不连续.68 色彩深度Color depth 用于表现像素的位的数量,即色彩深度,依赖于像素的颜色是如何由不同的编码技术来处理的.对颜色的感觉是人眼如何对光线的响应.人眼有不同类型的感光细胞:一些响应红、绿、蓝三原色(也叫 RGB),而另一些仅仅响应光的密度.69 真彩色 True-Color 用于像素编码的技术之一称为真彩色,使用24位来编码一个像素.每个三原色(RGB)都表示为8 位。224=16777216 由于该技术中的 8位模式可以表示 0 255 之间的一个数,每种颜色都由0 255 之间的三维数字表示。书错P44 70 索
29、引色Indexed color 索引色(或调色板色)模式仅使用其中的一部分.每个应用从大的色彩集中(256 种)选取一些颜色并对其建立索引.对选中的颜色赋一个0255的值 Figure 3.17 索引色与真彩色的关系 71 例如,一部高质量的数码相机要用几乎300 万像素拍摄一张3 5 英寸的照片.使用各种模式存储所需要的位的数量如下所示:书错P44 72 图像编码标准 Standards for image encoding 几种用于图像编码的实际标准正在使用中.?JPEG(联合图像专家组Joint Photographic Experts Group)使用真彩色模式,但压缩图像来减少位的数
30、量(参见第15章).?GIF(图 形 交 换 格 式 Graphic Interchange Format),使用索引色模式.73 矢量图 Vector graphics 光栅图有两个缺点:文件尺寸太大、重新调整图像大小有麻烦.放大光栅图像意味着扩大像素,所以放大后的图像看上去很粗糙.矢量图图像编码方法并不存储每个像素的位模式.一个图像被分解成几何图形的组合,例如:线段、矩形或圆形.例如,考虑半径为r的圆形.程序需要绘制该圆的主要信息如下:1.圆的半径.2.圆心的位置.3.绘制的线形和颜色.4.填充的类型和颜色.74 3-6 存储视频 STORING VIDEO 视频是图像在时间上的表示 (称为帧frames).一部电影就是一系列的帧一张接一张地播放而形成运动的图像.换言之,视频是随空间(单个图像)和时间(一系列图像)变化的信息表现.所以,如果知道如何将一幅图像存储在计算机中,也就知道如何存储视频。每一幅图像或帧转化成一系列位模式并存储.这些图像组合起来就可表示视频.视频压缩技术video compression将在第15 章讨论.75 习题 书P47-49 题6-53 76