第3章 数据表示法
在旅行时,你可能需要一张地图,可能是老式地图、折叠地图,抑或是电子地图。不论什么样子,地图并不是你游历的地点,而是这些地点的一种表示,它具有从一个地点到另一个地点所必需的信息。
同样,我们需要一种方法来表示计算机存储和管理的数据,这种方法要能够捕捉信息的要素,而且必须采用便于计算机处理的形式。第2章介绍了二进制记数系统的基本概念,这一章将探讨如何表示和存储计算机管理的各种类型的数据。
目标
学完本章之后,你应该能够:
- 区分模拟数据和数字数据。
- 解释数据压缩和计算压缩率。
- 解释负数和浮点数的二进制格式。
- 描述ASCII和Unicode字符集的特征。
- 执行各种类型的文本压缩。
- 解释声音的本质和它的表示法。
- 解释RGB值如何定义颜色。
- 区分光栅图形和矢量图形。
- 解释时间和空间视频压缩。
3.1 数据与计算机
没有数据,计算机就毫无用处。计算机执行的每个任务都是在以某种方式管理数据。因此,用适当的方式表示和组织数据是非常重要的。
首先,我们来区别一下术语数据和信息。虽然这两个术语通常可以互换使用,但分清它们还是有用的,尤其对计算来说更是如此。数据是基本值或事实,而信息则是用某种能够有效解决问题的方式组织或处理过的数据。数据是未组织过的,缺少上下文。信息则可以帮助我们回答问题(即“告知”)。当然,这种区别是相对于用户的需求而言的,但它却正是计算机在协助我们解决问题时所扮演的角色的本质。
**数据(data):基本值或事实。
信息(information):用有效的方式组织或处理过的数据。**
本章的重点是各种类型的数据的表示法。在后面的几章中,将讨论各种组织数据来解决特定类型问题的方法。
不久以前,计算机处理的几乎都是数字和文本数据,但现在它已经成为真正的多媒体设备,可以处理各种各样的信息。计算机可以存储、表示和帮助我们修改各种类型的数据,包括:
- 数字
- 文本
- 音频
- 图像和图形
- 视频
这些数据最终都被存储为二进制数字。每个文档、图像和音频都将被表示为由0和1组成的字符串。这一章将依次探讨每种数据类型,介绍在计算机上表示这些数据类型的方式的基本思想。
如果不讨论数据压缩,就不能讨论数据表示法。所谓数据压缩,就是减少存储一段数据所需的空间。过去,由于存储的局限性,我们需要使数据尽可能地小。现在,计算机存储变得比较便宜了,但是我们有更迫切的理由来缩短数据,因为我们要与其他人共享数据。网站和它底层的网络具有固有的带宽限制,带宽定义了在固定时间内从一个地点传输到另一个地点的最大位数或字节数。
**多媒体(multimedia):几种不同的媒体类型。
数据压缩(data compression):减少存储一段数据所需的空间。
带宽(bandwidth):在固定时间内从一个地点传输到另一个地点的最大位数或字节数。**
压缩率说明了压缩的程度,是压缩后的数据大小除以原始数据大小的值。压缩率的值可以是位数、字符数或其他各种适用的单位,只要这两个值采用的单位相同即可。压缩率是一个0到1之间的数。压缩率越接近0,压缩程度越高。
数据压缩技术可以是无损的,即提取的数据没有丢失任何原始信息。数据压缩也可以是有损的,即在压缩过程中将丢失一些信息。尽管我们从来都不想丢失信息,但在某些情况下,损失是可以接受的。在处理数据表示法和压缩时,我们总要在精确度和数据大小之间做出权衡。
**压缩率(compression ratio):压缩后的数据大小除以原始数据大小的值。
无损压缩(lossless compression):不会丢失信息的数据压缩技术。
有损压缩(lossy compression):会丢失信息的数据压缩技术。**
3.1.1 模拟数据与数字数据
自然界的大部分都是连续的和无限的。实数直线图像是连续的,直线中的数值可以是无限大或无限小的。也就是说,给定任意的数,总可以找到比它大或比它小的数。两个整数之间的数字空间是无限的。例如,任何数都可以被均分。但是,世界并非只是数学意义上的无限。色谱是无限种色度的连续排列。现实世界中的对象在连续的无限空间中移动。理论上说来,可以给出你和墙之间的距离,但你却绝对无法真正到达那堵墙。
相反,计算机则是有限的。计算机内存和其他硬件设备用来存储和操作一定量数据的空间只有那么多。用有限的机器表示无限的世界,我们从来都没有成功过。然而我们的目标是使表示的世界满足我们的计算需要和视觉及听觉官能。我们想使自己的表示法能够满足所有作业。
表示数据的方法有两种,即模拟法和数字法。模拟数据是一种连续表示法,模拟它表示的真实信息。数字数据是一种离散表示法,把信息分割成了独立的元素。
**模拟数据(analog data):用连续形式表示的信息。
数字数据(digital data):用离散形式表示的信息。**
水银温度计是一种模拟设备。水银柱按温度的正比例在管子中升高。我们校准这个管子,给它标上刻度,以便能够阅读当前的温度,通常是一个整数,如华氏75度。但是,水银温度计升温时实际采用的是连续的方式。有时,实际温度是华氏74.568度,水银柱的确指在相应的位置,但即使我们的标记再详细,也不足以反映出这么细微的改变。请参阅图3-1。
模拟数据完全对应于我们周围连续无限的世界。因此,计算机不能很好地处理模拟数据。我们需要数字化数据,把信息分割成片段并单独表示每个片段。这一章中讨论的每种表示法都是把一个连续的实体分割成离散的元素,然后用二进制数字单独表示每个离散
元素。
数字化(digitize):把信息分割成离散的片段。
但为什么使用二进制呢?从第2章可以了解到,二进制只是众多等价的记数系统中的一员。那么能使用我们所熟悉的十进制吗?可以。事实上,采用十进制的计算机早就出现了。但是,现代计算机使用和管理的都是二进制数值,因为如果存储和管理数据的设备只需要表示两种数值之一,那么费用要小得多,而且也可靠得多。
此外,如果电信号只传输二进制数据,也易于维护。表示模拟信号的电平持续地上下波动,但是数字信号却只有高低两种状态,对应两个二进制数字。请参阅图3-2。
在沿线下降时,所有电信号(包括模拟信号和数字信号)都会降级。也就是说,由于环境影响,信号的电平会波动。问题是,当模拟信号降级时,信息就会丢失。由于任何电平都是有效的,所以不可能知道原始的信号状态,甚至不能知道该信号是否改变过。
另一方面,数字信号只在两个极端之间跳跃,被称为脉冲编码调制(PCM)。数字信号在信息丢失之前可以降级相当多,因为大于某个阈值的电平值都被看作高电平,小于这个阈值的电压值都被看作低电平。数字信号会被周期性地重新计时,以恢复到它的原始状态。只要在信号降级太多之前重新计时,就不会丢失信息。图3-3展示了模拟信号和数字信号的降级效应。
**脉冲编码调制(pulse-code modulation):电信号在两个极端之间跳跃的变化。
重新计时(reclock):在信号降级太多之前将它重置为原始状态的行为。**
3.1.2 二进制表示法
在开始单独介绍各种数据类型的表示法之前,要记住二进制的固有特性。一个位只能是0或1,没有其他的可能,因此,一个位只能表示两种状态之一。例如,如果我们要把食物分成甜的和酸的两类,那么只用一位二进制数字即可。可以规定,0表示食物是甜的,1表示食物是酸的。但是,如果要表示更多的分类(如辣的),一位二进制数字就不能胜
任了。
要表示多于两种的状态,需要多个位。两个位可以表示四种状态,因为两个位可以构成四种0和1的组合,即00、01、10和11。例如,如果要表示一辆汽车采用的是四种档(停车、发动、倒车和空档)中的哪一种,只需要两位二进制数字即可。停车由00表示,发动由01表示,倒车由10表示,空档由11表示。位组合与它们表示的状态之间的实际映射有时是无关的(如果你愿意,可以用00表示倒车档),然而有时这种映射是有意义的也是很重要的,我们将在本章后面的小节中讨论这一点。
如果要表示的状态多于四种,就需要两个以上的位。三位二进制数字可以表示8种状态,因为三位数字可以构成8种0和1的组合。同样,四位二进制数字可以表示16种状态,五位可以表示32种,依此类推。请参阅图3-4。注意,每列中的位组合都是二进制的。
一般说来,n位二进制数字能表示2n种状态,因为n位数字可以构成2n种0和1的组合。请注意,每当可用的位数增加一位,可以表示的状态的数量就会多一倍。
让我们把这个问题反过来。要表示25种状态,需要多少位?四位二进制数字是不够的,因为四位数字只能表示16种状态。至少需要五位二进制数字,它们可以表示32种状态。由于我们只需要表示25种状态,所以有些位组合没有有效的解释。
记住,即使技术上只需要最少的位数来表示一组状态,而我们也可能会多分配一些位数。计算机体系结构一次能够寻址和移动的位数有一个最小值,通常是2的幂,如8、16或32位。因此,分配给任何类型的数据的最小存储量通常是2的幂的倍数。