首页 > 代码库 > 第三章 数据表示法
第三章 数据表示法
1 数据和计算机
数据和计算机的联系
计算机存在的意义是管理数据。
数据和信息的区别
数据:基本值。
信息:经过组织或处理后有含义的数据。
计算机可以存储、表示的数据包括
- 数字
- 文本
- 音频
- 图像和图形
- 视频
上述这些数据最终都被存储为二进制数字,简单说即是由0和1表示。
数据压缩
2 模拟数据和数字数据
自然办的大部分都是连续和无限的。而计算机则是有限的。计算机内存和其他硬件设备用来存储和操作一定量的数据空间只有那么多。
表示数据的方法有两种:模拟法和数字法。
模拟数据是一种连续表示法,模拟它表示的真实信息。
数字数据是一种离散表示法,把信息分割成了独立的元素。
二进制单位转换
bit:位,byte:字节,M:兆,1G:1G。
1byte=8bit
1KB=1024byte
1MB=1024KB
1G=1024MB
1T=1024GB
为什么使用二进制,而不使用十进制或其他数字系统来表示?
- 二进制数在物理上最容易实现。例如,可以只用高、低两个电平表示"1"和"0",也可以用脉冲的有无或者脉冲的正负极性表示它们。
- 二进制数用来表示的二进制数的编码、计数、加减运算规则简单。
- 二进制数的两个符号"1"和"0"正好与逻辑命题的两个值"是"和"否"或称"真"和"假"相对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利的条件。
3 数字数据的表示法
整数表示法
负数表示法
进进制补码
数据溢出
实数表示法
4 文本表示法
字符数是有限的,所以只要给所有字符都赋予一个二进制字符串来表示,我们可以称这些字符的集合称为字符集。
不同语言所使用的字符数是不相同的,所以当今的计算机系统出现了多种字符集。
ASCII字符集
美国信息互换标准代码(American Standard Code for Information Interchange)。以前的ASCII字符集用7位表示每个字符,可以表示128个不同的字符。现在的ASCII字符集使用8位表示每个字符,可以表示256个字符。
Unicode字符集
Unicode字符集称为统一码,使用16位(双字节)表示每个字符,能够表示多达6万5千多个字符。
文本压缩
为了减少文本占用的存储空间以及有效地在两台计算机之间传递文本,所以通常会使用文本压缩功能。
关键字编码
简单的说,将经常使用的多个字符的组合使用某个字符代替。例如:将 The 与‘!‘对应,将 You与"@"对应。这种方法有局限点,关键字编码的字符不能出现在原始文本中。
行程长度编码
简单的说,将连续出现的字符用数值和字符表示。例如:将AAAAAAA用*A7表示,*为特殊标志,A为重复出现的字符,7为字符出现的次数。
赫夫曼编码
简单的说,是用变长的二进制串表示字符,使常用的字符具有较短的编码。
例如:
赫夫曼编码 | 字符 | 赫夫曼编码 | 字符 |
00 | A | 111 | R |
01 | E | 1010 | B |
100 | L | 1011 | D |
110 | O |
那么单词DOORBELL的二进制编码如下:
1011 110 110 111 1010 01 100 100
而根据ASCII字符集时的二进制编码如下:
01000100 01001111 01001111 01010010 01000010 01000101 01001100 01001100
5 音频信息表示法
计算机可以记录、存储和播放声音(如发音、音乐等)。声音或音频数据是以两种不同的方法进行表示的:波形或M I D I音乐。两者之间的区别类似于磁带录音与钢琴表演。
波形音频
波形音频是声音的数字形式表示。对于声音的数字记录来说,会周期性地对声音波形进行采样并以数字数据的形式进行存储。音乐、发音和声音都可以以波形形式进行存储。
采样速率指的是在记录过程中,每秒钟对声音测量的次数。采样速率以H z为单位。每秒钟采样1 0 0 0次即为1 0 0 0 H z或1 K H z。声音每秒钟需要88 200个字节。而立体声需要两倍的存储空间,因为需要记录两个记录来达到立体声的效果。但采样速率为 4 4 . 1 K H z时,在1 . 4 4 M B的软盘上,仅仅能存储8秒钟的音乐。而典型的一辑摇滚乐(4 5分钟)需要4 7 5 M B。
计算波形文件的例子
声卡对声音的处理质量可以用三个基本参数来衡量,即采样频率、采样位数和声道数。采样频率是指单位时间内的采样次数。采样频率越大,采样点之间的间隔就越小,数字化后得到的声音就越逼真,但相应的数据量就越大。声卡一般提供11.025kHz、22.05kHz和44.1kHz等不同的采样频率。
采样位数是记录每次采样值数值大小的位数。采样位数通常有8bits或16bits两种,采样位数越大,所能记录声音的变化度就越细腻,相应的数据量就越大。
采样的声道数是指处理的声音是单声道还是立体声。单声道在声音处理过程中只有单数据流,而立体声则需要左、右声道的两个数据流。显然,立体声的效果要好,但相应的数据量要比单声道的数据量加倍。
不经过压缩声音数据量的计算公式为:
数据量(字节/秒)= (采样频率(Hz)*采样位数(bit)*?声道数)/ 8,其中,单声道的声道数为1,立体声的声道数为2。
应用举例
【例1】请计算对于5分钟双声道、16位采样位数、44.1kHz采样频率声音的不压缩数据量是多少?
解:
根据公式:
数据量=(采样频率×采样位数×声道数×时间)/8
得,数据量=[44.1×1000×16×2×(5×60)] /(8×1024×1024)
=50.47MB
因此,声音的不压缩数据量约为50.47MB。
计算时要注意几个单位的换算细节:
时间单位换算:1分=60秒
采样频率单位换算:1kHz=1000Hz
数据量单位换算:1MB=1024×1024=1048576B
6 图像和图形的表示法
位图图像和矢量图像这两种编码方法的不同,影响到图像的质量、存储图像的空间大小、图像传送的时间和修改图像的难易程度。
颜色表示法
颜色是我们对到达视网膜的各种频率的光的感觉。我们的视网膜有有三种颜色感光视锥细胞,负责接收不同频率的光。这些感光器分别对应于红、绿和蓝三种颜色。人眼可以觉察的其他颜色都由这三种颜色混合而已。
在计算机中,颜色通常用RGB(red-green-blue)值表示,这其实是三个数字,说明了每种原色的相对比例。
数字化表示法
位图图像
计算机通过指定每个独立的点(或像素)在屏幕上的位置来存储位图图像。
像素
显示屏幕是由一行行或一列列的像素(点)组成的,打个比方,显示器的分辨率为1024*768像素,即表示每一行有1024个像素,每一列有768个像素。
用二进制表示位图图像
最简单的位图图像是单色图像。单色图像包含的颜色仅仅有黑色和白色两种,即是指每一个像素点只有黑色和白色两种。一个像素点有两种颜色的情况,因此可以用1 bit表示一个像素点,假设有一幅1024*768的单色图像,那它的文件大小是:1024*768*1=786432bit,即是约98KB。继续推算,假设有一幅256色图像,由此我们知道一个像素点有256种颜色的情况,需要用8bit来表示一个像素点,那它的文件大小是:1024*768*8=6291456bit,即是约786KB。
关于位图图像文件格式
位图图像通常用于现实中的图像,如扫描的图像。文件的扩展名为: . b m p,. p c x,. t i f,. j p g和. g i f。需要注意的是,除了BMP图像文件是未经过压缩等处理外,其它文件格式都是经过某些压缩处理的,主要是为了节省空间。所以在做测试时,应该对图像文件使用bmp文件格式进行保存。
位图图像的修改
因为位图文件用一系列的比特来表示像素,因此可以修改或编辑单个的像素,也可以同时修改一个区域的像素。
图形矢量表示法
矢量图像由一串可重构图像的指令构成。在创建矢量图片的时候,可以用不同的颜色来画线和图形。然后计算机将这一串线条和图形转换为能重构图像的指令。计算机只存储这些指令,而不是真正的图像。矢量图像看起来没有位图图像真实。
简单地说,保存的是画图像的命令,而不是图像本身。
矢量图像的优点
存储空间小、方便修改(可以把矢量图像的一部分当作一个单独的对象进行修改)。
关于矢量图像文件格式
包含矢量图像的文件的扩展名为:. w m f,. d x f,. m g x和. c g m。
7 视频
视频与图片的关系
视频由一系列的帧组成,每个帧是一幅静止的图片,并且图像也使用位图文件形式表示的。然而,视频每秒钟需要显示3 0帧(一般来说,视频至少要24帧才不会觉得卡),这意味着视频需要巨大的存储空间。
一个例子
一幅全屏的、分辨率为6 4 0×4 8 0的2 5 6色图像有307 200个像素。因此,一秒钟视频需要的空间是3 0乘上这个数,即9 216 000个字节,大约9兆(如图1 0 - 1 7) 。两小时的电影需要66 355200 000个字节,超过6 6 G字节!居然还是一个低质量的视频--!算一算,每秒要处理近10M的视频数据,我台破电脑肯定要挂掉。
视频压缩
不过,现在一部两小时的高清电影大概就4G到6G,究竟是什么原因导致文件大幅度缩水呢?
这是因为视频经过视频编码器压缩过,主要使用时间压缩和空间压缩两种方式。时间压缩将查找连续帧之间的差别。如果两个帧中的图像大部分都没有改变,那么相同的部分就不需要再存储,信息量自然就减少了很多。空间压缩将删除一个帧中的冗余信息,把颜色相同的像素(如湛蓝的天空)聚集在块(矩形区域)中,存储的不是每个像素的信息,而是块的颜色和坐标。空间压缩的方式实际上是压缩每一张图片,所以也是图片压缩的方式之一。
第三章 数据表示法