本文译自 FOUNDATIONS OF COMPUTER SCIENCE 的第二章 Data Representation

DATA TYPES

现在的数据有各种各样的形式,比如:数值、文本、图像、视频和音频(如下图所示)。人们需要处理这些数据类型。

img

  • 一个工程程序使用计算机主要是处理数值:做算术、求解代数或三角方程、寻找微分方程的根等等。
  • 一个单词处理程序使用计算机主要是处理文本:调整、移动、删除等等。
  • 一个图像处理程序使用计算机主要用来操作图像:新建、缩小、扩大、旋转等等
  • 计算机也可以用来处理音频数据。你可以在计算机上播放音乐,也可以输入你的声音作为数据
  • 最后,计算机也可以被用来播放电影,也可以制作电影中的特效。

计算机行业使用术语 多媒体 (multimedia) 来定义包含数字、文本、图像、音频和视频的信息。

DATA INSIDE THE COMPUTER

现在的问题是:你将如何处理这些数据类型?你会使用不同的电脑来处理不同的数据类型吗?换句话说,你有一类只处理数字的计算机吗?你有一类只处理文本的计算机吗?

使用不同计算机处理不同数据类型的方法既不经济也不可行,因为数据通常是许多类型的混合。比如,尽管一个银行主要处理数字,但它也需要以文本方式存储客户的名字。另一个例子是,图像通常是图形和文本的混合。

最方便的方式是使用一个统一的数据表示方式。当在计算机存储时,来自计算机外部的所有数据类型被转化为该统一表示,然后在离开计算机时转换回来。这种通用格式称为 位模式 (bit pattern)

BIT

在更详细讨论位模式之前,我们必须定义什么是一个比特(we must define a bit)。一个比特(binary digit)是计算机能够存储的最小数据单元,它不是 0 就是 1。一个比特表示可以采用两种状态之一的设备的状态。比如,一个开关可以是开的,也可以是关的。我们约定把开的状态表示为 1,关的状态表示为 0。一个电子开关可以表示一个比特。换句话说,一个灌灌可以存储一个比特的信息。现在的计算机使用各种双状态设备来存储数据。

BIT PATTERN

一个单独的比特不太可能解决数据表示的问题。如果每个数据都可以使用 0 或 1 表示,那么你只需要一个比特。然而,你需要存储更大的数字;你需要存储文本;你需要存储图形等等。

为了表示不同的数据类型,你可以使用位模式(bit pattern)。位模式是一系列的比特。下图表示了一个由 16 个比特组成的位模式。位模式是由很多 0 和很多 1 组成的。这意味着当你存储一个由 16 个比特表示的位模式,你需要 16 个电子开关。如果你需要存储 1000 个由 16 比特表示的位模式,你需要 16000 个开关。

1000101010111111

现在的问题是,计算机内存是如何知道存储的位模式代表什么类型的数据?它其实不知道。计算机内存只是将这些数据存储为位模式。将位模式转化为数字、文本或者其他数据类型是输入输出设备或者程序的责任。换句话说,数据在进入计算机时进行编码,在向用户呈现时进行解码。

img

BYTE

按传统,长度为 8 的位模式被称做字节。这个术语也被用来计算内存的大小或者其他的存储设备。比如,一个可以存储八百万比特信息的计算机的内存可以被称做具有一百万字节的存储空间。

REPRESENTING DATA

现在我们可以解释如何使用位模式表示不同数据类型。

TEXT

任何语言的一段文字(text)都是用来表示该语言思想的一系列符号。比如,英语使用 26 个符号(A, B, C .., Z)来表示大写字母, 26 个符号(a, b, c .., z)来表示小写字母,9 个符号(0, 1, 2 .., 9)来表示数字字符(不是数字,其中不同后面会提到)以及一系列符号(., ?, : … !)来表示标点符号。其他的诸如空格、换行符和制表符用于文本对齐和可读性。

你可以用位模式表示每个符号。换句话说,四个符号组成的诸如 “BYTE” 的文本可以表示为 4 个位模式,其中每个位模式定义单个符号(如下图)。

img

现在的问题是:要表示一个语言中的一个符号,位模式需要多少比特?这取决于集合中有多少个符号。比如,如果你创造了一个只有英文大写字母的语言,你只需要 26 个符号。为了表示这个语言,位模式必须能够表示至少 26 个符号。对于另一种语言,比如中文,你也许需要更多的符号。表示语言中符号的位模式的长度取决于该语言中使用的符号数。想要表示更多的符号就需要更长的位模式。

尽管位模式的长度取决于符号的数量,他们的关系不是线性的,而是对数的。如果你需要表示两个符号,位模式的长度是 1比特(log_2 2的值是1).如果你需要表示四个符号,位模式的长度是 2 比特(log_2 4的值是2)。下表表示出它们的关系。2比特长度的位模式可以表示4种不同形式:00, 01, 10, 11。任意一种形式可以表示一个符号。同样地,3比特长度的位模式可以表示8中不同的形式:000, 001, 010, 011, 100, 101, 110, 111

#NAME: Number of symbols and bit pattern length

Number of Symbols Bit Pattern Length
2 1
4 2
8 3
16 4
128 7
256 8
65,536 16

CODE

我们已经设计了不同的位模式组来表示文本符号。每一个组被称做为一个编码(code),表示符号的过程称做编码(coding)。在这节中,我们将介绍常见的编码。

ASCII

美国国家标准学会(American National Standards Institute,ANSI)开发了一套称做ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)的编码。这套编码使用 7比特表示每个符号。这意味着它可以定义 128(2^7)种不同的符号。完整的 ASCII 码位模式在附录 A 中,下图表示了 “BYTE” 的 ASCII 码表示形式。

img

下面的内容强调了这套编码的一些特点:

  • ASCII 使用一个七比特的位模式,表示范围是 0000000-1111111
  • 第一个模式(0000000)表示空符号(The first pattern represents the null character(lack of character))
  • 最后一个模式(1111111)表示删除符
  • 有 31 个控制符(不可打印)
  • 数字字符(0到9)在字母之前编码
  • 有几个特殊的可打印字符
  • 大写字母(A到Z)在小写字母(a到z)之前
  • 大写字母和小写字母之间的区别只有 1 比特。比如,A的编码是 1000001,a的编码是 1100001.唯一的区别是右数的第六位。

-大写字母和小写字母之间有 6 个特殊符号。

Extended ASCII

为了让每个模式的大小刚好是1字节,ASCII 码的位模式最左边增加了一个额外的0。现在每个模式和内存的1个字节很匹配(Now each pattern can easily fit into 1 byte of memory)。换句话说,在扩展 ASCII 码中,第一个模式是 00000000,最后一个模式是 11111111。

一些制造商也决定使用额外的一个比特表示额外的 128 个符号。但是,由于每个制造商创建的非标准集,这个尝试不是那么成功。

EBCDIC

在早期的计算机中,IBM 开发了一套叫做EBCDIC(Extended Binary Coded Decimal Interchange Code,扩增二进式十进交换码)的编码。这套编码使用8比特模式,因此它最多可以表示 256 个符号。但是这套编码只在 IBM 的大型机上使用。

Unicode

之前介绍的编码只能够表示英语的符号。因此,我们需要一套能有更大表示能力的编码。硬件和软件制造商联盟设计了一个名为Unicode的代码。它使用16比特,最多可表示655536(2^16)个符号。这套编码的不同部分被分配用作表示世界上其他不同的语言符号。Java™ 语言用这套编码表示字符。微软的 Windows 使用其前 256 个字符的一个变体。

ISO

国际标准化组织(International Organization for Standardization, ISO )设计了一套时候用32比特的编码。这套编码最多可以表示 4,294,967,296(2^32)个符号,这足以表示现在世界上的任意一个符号。

NUMBERS

在计算机中,使用二进制系统表示数字。在这个系统中,位模式(0或1的序列)表示一个数字。然而,诸如 ASCII 的编码方式没有用作表示数据,原因和对数字的表示会在第三章进行介绍。

IMAGES

现在,有两种方式表示存储在计算机中的图像:位图(bitmap graphic)或者矢量图(vector graphic)。

img

Bitmap Graphic

在这种图像表示方法中,一个图像被分割成一个像素(pixel, picture elements)矩阵,其中每个像素是一个小点。像素的大小取决于分辨率(resolution)。比如说,一个图像可以被划分成1000像素或者10000像素。在第二种情况中,虽然图像显示的更好(分辨率更搞),但是需要更多的内存去存储图像。

在把一个图像划分成像素之后,每个像素被分配一个位模式。模式的大小和值取决于图像本身。对于一个只由黑点和白点组成的图像(国际象棋棋盘),一个1比特长的位模式就足以表示一个像素。模式0表示黑色像素,模式1表示白色像素。然后将这些这些模式一个接一个记录下来并存储在计算机中。下图显示了这种图像及其表示。

img

如果一个图像不是由纯白或纯黑像素组成,你可以增加位模式的长度来表示灰度值(gray scales)。比如,为了表示4级的灰度值,你可以使用2位的位模式。黑色像素可以使用00表示,01表示暗灰像素,10表示亮灰像素,11表示白色像素。

为了表示彩色图像,每个彩色像素被分解成三原色:红色、绿色和蓝色(RGB)。然后测量每种颜色的亮度,并为其分配位模式(通常为8位)。换句话说,每个像素有三个位模式:一个用来表示红色的亮度、一个表示绿色的亮度、一个表示蓝色的亮度。比如,下图显示了使用四个位模式表示彩色图像中某些像素。

img

Vector Graphic

位图存储方法的问题是表示特定图像的位模式必须存储在计算机中。如果以后我们要重新缩放图像,则必须更改像素的大小,这会使图像变成锯齿状或颗粒状。然而,矢量图方法不会存储位模式。在矢量图中,图像会被分解为曲线和线的组合。每条曲线或线被一个数学公式表示。比如,一条直线可以用其端点坐标来表示,一个圆可以由其圆心坐标和圆的半径表示。这些公式的组合被存储在计算机中。当要显示或打印图像时,图像的大小作为输入提供给系统。系统使用新尺寸重新设计图像,并使用相同的公式绘制图像。在这种情况下,每次绘制图像时,都会重新计算公式。

AUDIO

音频是声音或音乐的一种表现形式。尽管没有标准规定如何存储声音或音乐,但想法是将音频转换成数字数据并使用位模式来存储他们。音频本质上是模拟数据。它是连续的(模拟的),而不是离散的(数字的)。下图表示了将音频数据转化为位模式的步骤,具体如下:

  1. 采样模拟信号。采样意味着以相等的间隔测量信号的值
  2. 量化样本。量化意味着量化意味着将值(从集合)分配给样本。比如,如果一个样本的值是 29.2,集合是0到63的整数集,则为样本分配值29
  3. 量化的值被转化成位模式。比如,数字25被转化成位模式 00011001
  4. 存储位模式

img

VIDEO

视频是图像(也被称做帧)的及时表示。一部电影是一系列帧的连续展示,以创造运动的假象。因此,如果你知道如何在计算机中存储图像,一页会知道如何存储视频:每幅图像或称为帧被转化为位模式的集合并存储。图像的组合表示为视频。需要注意的是现在的视频通常是被压缩的。

结语

这个貌似是这一章的视频 https://slideplayer.com/slide/8524877/

bit 是翻译成比特好还是位好呢?sad