2.2 二进制与数据编码
在计算机中,数字、字符、图片、声音、视频等所有信息都要进行二进制编码才能存储和处理。
2.2.1 二进制与数字的表示
计算机最早发明时的主要用途就是数学计算,数字在计算机中以二进制数的形式存储和参与计算。
1. 机器数
在计算机中采用固定数目的二进制位数来表示数字,称为机器数。机器数的表示范围受计算机字长的限制,一般字长为8、16、32或64位,如果数值超出机器数能表示的范围,就会出现“溢出”错误。本节假设计算机使用8位字长表示数字。
数值有正、负之分,通常把一个二进制数的最高位作为符号位。规定“0”表示正数,“1”表示负数,如图2-8所示。
图2-8 机器数
【例2.8】 8位计算机中整数+11和-11对应的机器数。
整数11对应的二进制数是1011,因此+11的机器数是00001011;-11的符号为负号,第8位为1表示负数,因此-11对应的机器数10001011。
在计算机中,数字可以采用原码、反码、补码存储和处理,不同的编码有不同的计算规则。
2. 原码
原码是数字最简单的表示方法。用0表示正号、1表示负号,数值部分为真值的绝对值(真值为机器数所代表的数)。0的原码有两种表示方法。
3. 反码
正数的反码与原码相同,负数的反码由原码的数值部分按位取反得到(即0变为1,1变为0)。0的反码有两种表示方法。
4. 补码
正数的补码与原码、反码相同,负数的补码等于负数的反码加1。
0有唯一的补码,[+0]补=[-0]补=00000000。-0的补码为100000000(8个0),受8位字长限制,最高位1在运算过程中,由于没有电子元器件表示而丢失,从而使保留下来的结果恰好与+0的补码一致。
5. 补码的算术运算
数字在计算机中采用补码存储和处理的主要原因是可以将计算中的减法运算转变为加法运算,而原码和反码则不行。
假设以8个二进制数表示一个数字,要计算数学表达式10-7的结果。首先,10-7可以看作10+(-7),则计算机需要计算10与-7的和。按照原码表示方法,10的原码是00001010,-7的原码是10000111,10+(-7)的原码计算表达式如下所示。
计算结果为10010001,对应十进制数为-17,结果显然不正确。
在进行含有负数的运算中使用补码的形式可以避免符号位参与运算时造成的错误结果。按照补码表示方法,10的补码是00001010,-7的补码是11111001,10+(-7)的补码计算表达式如下所示。
计算结果为9位二进制数,超出8位。将最高位(即最左边的1)舍去,得到结果为00000011,就是十进制数3,可见采用补码形式计算的结果正确。
在现代计算机系统中,为了有符号数值的存储和计算,数值一律采用补码来表示和存储。原因在于,使用补码可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理,可以将减法运算转变为加法运算。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
2.2.2 计算机中的字符编码
在计算机中,各种字符、汉字等非数值型字符需要转换为二进制进行存储和处理。
常用的西文字符有128个,包括10个十进制的数码0~9、52个大小写英文字母A~Z及a~z、32个标点符号、运算符、专用符号和34个控制符。
大多数小型机和所有微型计算机都采用ASCII(American Standard Code for Information Interchange,美国标准信息交换码)存储和处理西文字符,它是通用的国际标准编码。ASCII于1968年提出。
7位ASCII采用7位二进制数表示一个字符,由于7位二进制数表示的范围为0~127,共包含128个数字,用于表示常用的128个字符,如表2-3所示。每个字符占用1Byte的空间,即8位二进制数,最高位设置为0,其余7位表示ASCII值。
表2-3 ASCII表
ASCII中,小写字母比对应的大写字母大32,如图2-9所示。
图2-9 大小写字母的ASCII关系
2.2.3 计算机中的汉字编码
我国于1981年颁布了《信息交换用汉字编码字符集——基本集》,即国家标准GB 2312—80,简称国标码。基本集共收集汉字6 763个,其中常用一级汉字3 755,二级汉字3 008个。GB 2312—80编码用2Byte(16bit)表示一个汉字,所以理论上最多可以表示256×256=65 536个汉字。例如,汉字“大”字的国标码为3473H。
由于汉字数量庞大、编码复杂,所以计算机输入、存储、显示汉字时使用不同编码。
1. 机内码
在计算机内部,为了区分汉字编码和ASCII字符,将国标码每个字节的最高位由0改为1,构成汉字的机内码,也称内码。汉字在计算机内部存储、处理和传输时使用机内码。
汉字内码=汉字国标码+(8080)16,例如:
2. 输入码
通过键盘向计算机中输入汉字所使用的编码为输入码,也称外码。
例如,以拼音为基础的拼音类输入法,包括搜狗输入法、智能ABC、微软全拼等;以字形为基础的字形类输入法,如五笔字型;以拼音、字形混合为基础的混合类输入码,如自然码。随着拼音类输入法的识别率不断提高,拼音类输入法被广泛使用。
3. 输出码
输出码也称汉字字型码,指汉字字库中存储的汉字字型的数字化信息,用于汉字的显示或打印输出。不同的汉字字库存放不同形状的汉字字型(即字体),如宋体、楷体、隶书等,分为点阵和矢量两种表示方法。
(1)点阵字库
用点阵表示字型时,将一个汉字放在一个多行多列的网格中,有笔画通过的网格用二进制位1表示,没有笔画通过的网格用二进制位0表示,这样就构成汉字的点阵,如图2-10所示。一般有16×16、24×24、48×48、64×64点阵,行列数越大,字型质量越高,所占空间也越大。
图2-10 点阵字库
汉字字型码以二进制数形式保存在存储器中,构成汉字字库。每个汉字在字库中都占有一个固定大小的连续存储空间,如48×48点阵,需要288(=48×48/8)Byte空间存放一个汉字的字型码。
(2)矢量字库
矢量汉字字库存储的是描述汉字字型的轮廓特征,当要输出汉字时,通过计算机的计算由汉字字型描述生成所需大小和形状的汉字点阵。矢量表示方式与分辨率无关,因此可以产生高质量的汉字输出,且放大以后不影响输出效果。Windows中使用的TrueType技术就是汉字的矢量表示方式,如图2-11所示。
图2-11 TrueType字库
2.2.4 图像的数字化编码
在计算机中,图像是指由输入设备捕捉的实际场景画面或以数字化形式存储的画面。
图像由许多像素组合而成,每个像素用若干二进制位来表示其颜色。每个像素所占二进制位数越多,则色彩越丰富,效果越逼真。位图图像的色彩在计算机中采用RGB模式,即红、绿、蓝3种基本颜色各占若干二进制位,通过3种基本颜色的组合来产生颜色。
例如,24位颜色中从低位到高位分别用1Byte表示蓝色、绿色和红色。红色为#FF0000,绿色为#00FF00,蓝色为#0000FF,白色为#FFFFFF,黑色为#000000。
对位图进行缩放时图像会失真,如图2-12所示。位图主要用于表现人物、动植物等真实存在的自然景物。
图2-12 图像
现实中的图像都是模拟图像,要在计算机中存储、显示和处理,必须转换为数字形式,即数字化。图像的采集和数字化主要通过数码相机、摄像头、扫描仪等多媒体输入设备完成。
图像的数字化过程主要包括采样、量化与编码3个步骤。
(1)采样是对二维空间上的模拟图像在水平和垂直方向上等间距地分割成矩形网状结构,每个微小方格称为一个像素点。例如,一幅分辨率为640像素×480像素的图像由640×480=307 200个像素点组成。分辨率是指图像在横纵方向上像素点的个数,分辨率越高,图像质量越好,文件也越大。
(2)量化是将采样的每个像素点的颜色用相同位数的二进制数表示。采用的二进制数的位数称为量化字长,如量化字长为16位,表示每个像素点长16位,可以描述216=65 536种颜色。量化字长一般有8位、16位、24位或32位等。
计算机中的图像分为X行Y列的点阵,每个点用二进制数的编码表示其颜色,将所有点的二进制编码保存在一起成为一个图片文件。
例如,一张24位色、640像素×480像素的照片,表示宽为640列、高为480行的点阵,每个点用24位二进制编码表示其颜色,可以有224=16 777 216种颜色,如FF0000(红色)、00FF00(绿色)、0000FF(蓝色)等。存储该照片大约需要640×480×24/8B=921 600B=900KB的存储空间。
一张24位色、4 288像素×2 848像素的照片,需要大约4 288×2 848×24bit=35 778KB=34.94MB存储空间。
(3)由于采样、量化后得到的图像数据量巨大,必须采用编码技术来压缩其信息量。
彩色照片占用的存储空间可能很大,不利于保存和网络传输,可以采用压缩的方法减少其占用的空间。例如,采用JPEG压缩方法,在不影响效果的情况下可以将一张24位色、4 288像素×2 848像素的照片压缩为约3.2MB的JPG文件。
2.2.5 声音的数字化编码
声音又称音频,除语音、音乐外,还包括各种音响效果等,是重要的信息载体。自然界的声音是模拟音频,是随时间连续变化的模拟量,信号体现为波形,具有振幅、周期、频率3个重要指标。振幅越大,音量越大;频率越高,音调越高。
计算机中存储的音频为数字音频,它是随时间不连续或离散变化的数字量,图2-13(a)和(b)所示为模拟音频转化为数字音频后的不同效果。
图2-13 模拟音频和数字音频
模拟音频进入计算机时必须进行数字化处理,使其转换为数字音频,这一过程称为音频的数字化,它通常包括采样、量化和编码3个过程。音频的采集和数字化所需的硬件设备主要有声卡、麦克风等。
(1)采样过程是指每隔一定时间T对模拟音频信号的振幅取值,其中T称为采样周期,得到的振幅值称为采样值,采样后的数据仍为模拟量。将每1s的采样次数称为采样频率,如22.05kHz、44.1kHz、48kHz,如图2-14所示。
图2-14 不同采样率的音频
(2)量化过程是把每一个采样从模拟量转换为二进制的数字量。
(3)编码过程是将量化后的数字声音信号以二进制形式表示,编码可以用8bit、16bit、24bit表示,称为采样位数。采样的频率越高、采样的位数越高,声音越真实。
例如,44.1kHz的32位音频,每秒可以有44.1×1 024=45 158.4个采样,每个采样能描述232=4 294 967 296种声音信号。
1min的44.1kHz的32位音频,需要大约44.1×1 024×60×32bit=5 292KB=10.34MB存储空间。
如图2-14所示,高采样率的音频文件其文件大小要明显大于低采样率的文件大小,但其音频质量也要好于低采样率。
2.2.6 数据压缩技术
数据压缩技术对数据重新编码,以减少所需的比特数,减少占用的存储空间,便于传输。数据压缩是可逆的,它的逆过程称为解压缩。数据之所以能被压缩,是因为数据中存在冗余。
例如,图像数据的冗余主要表现为:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余,如图2-15所示,①和②两个区域中颜色相同,存在数据冗余。数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
图2-15 图像的冗余
1. 压缩的指标
评价一种数据压缩技术好坏的指标共有3个,即压缩比、压缩质量、压缩和解压缩速度。
(1)压缩比。压缩比是在压缩过程中输入数据量和输出数据量之比,是衡量压缩技术性能的重要指标。
(2)压缩质量。压缩质量是指压缩后的数据在解压缩后与原始数据相比的真实程度。
(3)压缩和解压缩速度。压缩和解压缩的速度越快越好。例如,为了保证视频的连贯性,对压缩和解压缩速度有严格要求。如果压缩和解压缩速度过低,视频会产生跳动感,用户难以接受。而对于静态图像,因为不需要保证连贯性,压缩和解压缩的速度要求并不高。
2. 压缩的分类
根据压缩后数据与原始数据的一致性,将压缩方法分为有损压缩和无损压缩。
(1)有损压缩。有损压缩的解码数据和原始数据存在一定的差别,允许有一定程度的失真。在压缩过程中丢失一些不敏感的信息,这些损失的信息将不能恢复,这种压缩方法不可逆。
人们观看图像、视频,听声音时,经常无法感觉到细微差别。所以,图像、视频或者音频等经常使用有损压缩方法进行数据压缩,其压缩比可以从几倍到上百倍。
(2)无损压缩。无损压缩的解码数据和原始数据严格相同,没有失真。
无损压缩利用数据的统计特性进行数据压缩。它对数据进行概率统计,对出现概率大的数据采用相对较短的编码,而出现概率小的数据采用较长编码,从而减少数据冗余。
无损压缩的压缩比一般为2∶1~5∶1,主要用于文本数据、程序代码和特殊应用场合的图像数据(如指纹图像、医学图像等)。
3. 图像和音频的压缩
JPEG(Joint Photographic Experts Group,联合图像专家小组)是静态图像压缩编码的国际标准,主要用于静止图像压缩,是彩色或灰度图像的压缩标准。JPEG压缩是有损压缩,适用于那些不太复杂或取自真实景象的图像压缩。它的性能依赖于图像复杂度,一般压缩比为10∶1~30∶1,图2-16(a)所示为压缩前的BMP文件,其大小为338KB;图2-16(b)所示为JPG图像,其大小仅为9KB。虽然图像压缩在质量上有一定损失,但是可以缩短传输时间,提高效率。
图2-16 BMP文件和JPG文件
提示
将现实世界的各种信息进行二进制的数字化编码后存储、计算和处理,将具有冗余信息的数据压缩后存储、处理和传输,是计算机系统的基本思维。