2.1 用0和1表示万事万物
0和1与非数值性信息
英文字母与各种符号可用0和1表示,中文汉字也可以用0和1表示,音频、视频及万事万物都可通过采样、量化、编码的方法用0和1表示。既然万事万物最终都可被符号化为0和1,也就都能基于0和1进行计算。人类使用各种符号进行的运算,都可通过基于0和1的运算来让机器完成。如图2.1所示即为符号化与计算化简要示意图。
图2.1 符号化与计算化简要示意图
2.1.1 用0和1进行编码
类似于英文字母与符号这种非数值信息,可采用编码来表示。所谓“编码”就是以若干位数码或符号的不同组合来表示非数值性信息的方法,它是人为地将若干位数码或符号的每一种组合指定一种唯一的含义。
例如,可以指定“0表示男,1表示女”;也可以指定“1表示男,0表示女”。
再例如,可以指定“从000始至110止分别表示周一至周日”;也可以指定“从001始至111止分别表示周一至周日”。
这就有一个问题了:如果任意指定编码的含义,则不同人在使用该编码时会产生歧义。因此,编码必须满足3个主要特征:唯一性、公共性和规律性。唯一性是指每一种组合都有确定的唯一性的含义,能唯一区分开所编码的每一个对象,在同一种编码中不能既表示这个对象又表示那个对象;公共性是指不同组织、不同应用程序都承认并遵循这种编码规则;规律性是指编码应有一定的编码规则,便于计算机和人能识别它和使用它。
制定编码规则时要考虑编码长度,即编码所使用0和1的位数。通常,编码长度决定了编码的信息容量,例如,4位编码,共有16种组合,只能编码16个不同对象;8位编码,共有256种不同组合,只能编码256个对象。因此若要编码N个对象,则编码长度m应满足2m≥N。
小知识
在计算机中,位(Binary Digit,bit)又称“比特”,是计算机所能表示信息的最小单位,是指1位二进制位。由于机器采用二进制,因此通常使用2的幂次方作为计量单位,例如, 23位(8位)称为1个字节(1B),24位(2个字节)称为1个字(Word)。其他计量单位如下:1KB=210B=1024B;1MB=210KB(约一百万字节);1GB =210MB;1TB、1PB、1EB、1ZB、1YB、1BB,按递增次序,上一级计量单位是下一级计量单位的210倍。
2.1.2 用0和1编码表示英文字母与符号
如何编码英文字母符号呢?英文有26个大写字母、26个小写字母,再加10个数字和一些标点符号,约100余个,因此编码长度需要7位。为满足公共性,需有统一的编码标准,因此出现了ASCII码(American Standard Code for Information Interchange,美国信息交换标准码)。ASCII码是用7位二进制数表示英文字母与常用符号的一种编码。为满足机器处理的方便性,通常采用8位来编码,其中最高位为0。目前ASCII码已成为计算机领域广泛使用的一种编码。
表2.1给出了标准的ASCII码表。8位编码为b7b6b5b4b3b2b1b0,其中b7始终为0。其每一种组合编码了一个字母或符号。例如,字母B的ASCII码为b7b6b5b4b3b2b1b0= 0100 0010,十六进制为42H(注:后缀H表示十六进制数);符号$的ASCII码为b7b6b5b4b3b2b1b0= 0010 0100,十六进制为24H等。常用英文大写字母A~Z的ASCII码为41H~5AH,小写字母a~z的ASCII码为61H~7AH。
表2.1 标准ASCII码表
续表
通过查阅ASCII码表,可将英文文本转换成01串进行存储,也可将01串转换成英文文本。
示例1 信息 We are students,如果按 ASCII 码存储成文件则为如下所示的一组01串:
01010111 01100101 00100000 01100001 01110010 01100101 00100000 01110011 01110100 01110101 01100100 01100101 01101110 01110100 01110011
如果要打开该文件并读出其内容,只要按照规则“对01串按8位分隔一个字符,并查找ASCII码表将其映射成相应符号”进行解析即可。
小知识
查看计算机的文件夹,会发现文件名包含两个部分:基本文件名.扩展名。其中的扩展名指出了文件的不同类型。一般地,不同类型的文件有不同的编码方式,即采用不同格式进行存储。不同类型的文件如果不知道其编码方式,则需要通过不同的软件来读取。典型的扩展名为 .txt的文件被称为纯文本文件,是按照ASCII编码方式存储的,可以读取并正确解析。
2.1.3 用0和1表示中文文字
1.汉字内码:汉字在机器内的表示与存储
如何编码汉字呢?首先汉字有超过50 000个单字,这种信息容量则要求两个字节,即16位二进制位编码才能满足。1981年我国公布了《信息交换用汉字编码字符集(基本集)》GB2312–80方案。GB2312–80编码又称“国标码”,是由2个字节表示1个汉字的编码,其中每个字节的最高位为0。GB2312-80编码共收录汉字6 763个,其中一级汉字3 755个,二级汉字3 008个,全角字符682个。
示例2 “大”的国标码为3473H:00110100 01110011。
“灯”的国标码为3546H:00110101 01000110。
“忙”的国标码为4326H:01000011 00100110。
这出现一个问题,即在中英文环境中出现一个01串00110100 01110011,如何知道其是汉字还是英文符号呢?为了和 ASCII 码有所区别,汉字编码在机器内的表示是在GB2312-80基础上略加改变,将每个字节的最高位设为1,形成了汉字的机内码。因此,汉字内码是用两个最高位均为1的字节表示一个汉字,是计算机内部处理、存储汉字信息所使用的统一编码。
示例3 “大”的机内码为B4F3H:10110100 11110011。
“灯”的机内码为B5C6H:10110101 11000110。
“忙”的机内码为C3A6H:11000011 10100110。
示例4 “我的英文名字是Tom”按汉字内码ASCII码产生的01串如下:11001110 11010010 10110101 11000100 11010011 10100010 11001110 11000100 11000011 11111011 11010111 11010110 11001010 11000111 01010100 01101111 01101101
十六进制表示为CED2 B5C4 D3A2 CEC4 C3FB D7D6 CAC7 54 6F 6D。为便于阅读,示例中增加了空格以示区分。
小知识
为容纳所有国家的文字,国际组织提出了 Unicode 标准。Unicode 是可以容纳世界上所有文字和符号的字符编码方案,用十六进制数字0~10FFFF来映射所有的字符(最多可以容纳1 114 112个字符的编码信息容量),可有效支持多种语言环境的信息交换。具体实现时,再将前述唯一确定的码位按照不同的编码方案映射为相应的编码,有UTF-8、UTF-16、UTF-32等几种编码方案。详细编码规则可网上查询。
2.汉字外码:用于汉字的键盘输入
如何将汉字输入到计算机中呢?人们发明了各种汉字输入码,又称汉字外码。汉字外码是以键盘上可识别符号的不同组合来编码汉字,以便进行汉字输入的一种编码。常用的汉字外码有拼音码、字形码、音形码等。拼音码是以汉字的拼音为基础编码汉字的一种方法。字形码是以汉字的笔画与结构为基础编码汉字的一种方法。音形码是以汉字的拼音与字形为基础编码汉字的一种方法。各种汉字外码的一个共同目的,就是实现快速记忆、快速输入、减少重码。详细编码可从网上搜索学习。目前手写识别技术已相当发达,可以通过手写汉字实现输入。
示例5 写出“型”的各种汉字外码。
(1)拼音码为xing。
(2)双拼码为“x;”其中“x”表示声母x,而“;”表示韵母ing。
(3)五笔字型码为gajf,其中g表示字根“—”,a表示“开”下的草字头,j表示右侧立刀,f表示下面的“土”字。
再例如,“伟”的五笔字型码wfn,其中w表示字根单人旁,f表示右侧两横,n表示右下的弯勾。
“育”的五笔字型码 yce,其中 y表示上部的点横,c表示中间的弯勾,e表示下部的“月”。若要用五笔字型输入汉字,需要记住字根的编码以及汉字的拆分方法。
3.汉字字模点阵码:用于汉字的显示与输出
解决了输入问题,还要解决输出问题,如何将汉字显示在屏幕上或在打印机上打印出来呢?人们发现,用0、1不同组合可表征汉字字形信息,如0为无字形点,1为有字形点,这样就形成了字模点阵码。16×16点阵汉字为32字节码,24×24点阵汉字为72字节码,ASCII码字符的点阵为8×8,占8个字节。例如,“大”字点阵字模如图2.2所示。除字模点阵码外,汉字还有矢量编码,从而可实现无失真任意缩放。
4.汉字由输入,到存储与处理,再到显示与输出
如图2.2所示为汉字“大”的处理过程。首先,通过拼音码(输入码)在键盘上输入“大”的拼音 da,然后计算机将其转换为“大”的汉字内码10110100 11110011保存在计算机中,再依据此内码转换为字模点阵码显示在显示器上。
图2.2 汉字的符号化处理示意
2.1.4 用0和1表示图像
图像是如何符号化的呢?图2.3显示的是一幅图像。如果将该图像按图示均匀划分成若干个小格,每一小格被称为一个像素,每个像素呈现不同颜色(彩色)或层次(黑白图像)。如果是一个黑白图像,则每个像素点只需1位即可表示0和1;而如果是一个灰度图像,则每个像素点需要8位来表示,即28=256个黑白层次;如果是一幅彩色图像,则每个像素点可采取3个8位来分别表示一个像素的三原色:红、绿、蓝,此即目前所说的24位真彩色图像。因此,图像即可视为这些像素的集合,对每个像素进行编码,然后按行组织起一行中所有像素的编码,再按顺序将所有行的编码连起来,就构成了整幅图像的编码。
一幅图像的尺寸可用像素点来衡量,即“水平像素点数×垂直像素点数”。如果格子足够小,则一个像素即为图像上的一个点,格子越小图像会越清晰,通常把单位尺寸内的像素点数称为分辨率,分辨率越高则图像越清晰。
一幅图像需占用的存储空间为“水平像素点数×垂直像素点数×像素点的位数”。如一幅常见尺寸的图像3 072×2 048×24=150 994 944bit(位)=18 874 368B(字节),即18MB,是很大的。因此图像存储需要考虑压缩的问题。所谓图像压缩其实就是一种图像编码的方法,图像编码既要考虑每个像素的编码,同时又要考虑如何组织行列像素点进行存储的方式。图像压缩即通过分析图像行列像素点间的相关性来实现压缩,压缩掉冗余的像素点实现存储空间占用的降低。
图2.3 图像的符号化示意
示例6 原始数据为00000000 00000010 00011000 00000000,压缩后的数据为1110 0100 0000 1011。此例采取的压缩原则是:用4位编码表示两个1之间0的个数。解读示例:第一个1之前有14个0,故写成14的二进制1110,接下来是一个1,再接下来是4个0,故有4的二进制0100,接下来是一个1,再接下来是0个0,故有0的二进制0000,表示前面那个1接下来还是一个1。再接下来是11个1,故有11的二进制1011。
显然,压缩后的数据不能直接用,所以使用前要先进行解压缩,恢复原来的形式。目前已出现很多种图像编码方法,如BMP(BitMap)、JPEG(Joint Photographic Expert Group)、GIF(Graphic Interchange Format)、PNG(Portable Network Graphics)等。具体的图像编码不在本书讨论了,读者可查阅相关的资料来学习。
2.1.5 习与练:识别0/1串表示的语义
计数制用来表示数值,编码不仅可以表示数值,还可以表示符号信息等。因此,同一数值或符号用不同进位制或用不同编码表示,其表达的结果是不同的。
示例7 将(245)十用进位计数制和各种编码表示。
解:245的十进制表示记为245;
245的二进制表示记为 11110101;
245的八进制表示记为365;
245的十六进制表示记为F5;
245的ASCII码表示记为00110010 00110100 00110101。
一串数字,用不同的进位制或编码解读,其表示的数值也是不同的。
示例8 00110011究竟表示什么?
解:(00110011)二表示的数值为 (51)十;
(00110011)十表示的数值为110011;
(00110011)八表示的数值为(36873)十;
(00110011)十六表示的数值为(1,114,129)十;
(00110011)ASCII表示的数值为3。
小知识
很多高级语言在编写程序时要求定义“数据类型”。这是因为不同的数据类型:(1)需要采用不同长度的比特来存储,例如,通常情况下,整型采用2字节,短整型采用1字节,长整型采用4字节,字符串采用可变长度等;(2)需要采用不同的编码来存储,例如,整型通常采用二进制补码(见第3章)来存储,字符型采用 ASCII码来存储等。
示例9 已知A~Z的ASCII码是(41)十六~(5A)十六,请将下面ASCII码存储的文件解析出来。
0100 0010 0100 0101 0100 0011 0100 0101 0100 1100 0100 0001
解:当看到一个01串时,如果已知是ASCII码,则可以每隔8位进行分组,如题可分隔出“0100 0010”“0100 0101”“0100 0011”“0100 0101”“0100 1100”“0100 0001”,转换为十六进制表示分别为(42)十六,(45)十六,(43)十六,(45)十六,(4C)十六,(41)十六,字母A~Z的ASCII码是自(41)十六,(42)十六,一直到(5A)十六依次编码的,因此可推断出(42)十六为B, (45)十六为E,(43)十六为C,(45)十六为E,(4C)十六为L,(41)十六为A,合在一起为BECELA。
示例10 已知某企业有50 000种材料,欲要为其设计一套编码规则,假如采用二进制编码,则其编码长度最少应是多少?而假如采用十进制编码,则其编码长度应是多少?而假如采用字母与数字组合编码且大小写无关,则其编码长度应是多少呢?
解:假设采用二进制编码,编码长度最少为m,则应满足2m≥50 000>2m-1,因此m应为16。
假设采用十进制编码,编码长度最少为n,则应满足10n≥50 000>10n-1,因此m应为6。因为1位数字共有10个,能编码10个对象,2位数字组合则能编码10×10个。4位编码能编码10 000个,5位编码能编码100 000个。故k为5。
假设采用字母与数字组合编码,编码长度最少为 k,则应满足 36k≥50 000>36k-1,因此k应为4。因为1位字母与数字共有36个(10个数字加26个英文字母)能编码36个对象,2位字母与数字组合则能编码36×36个。3位编码能编码46 656个,4位编码能编码1 679 616个。故k为4。
2.1.6 扩展学习:用0和1表示万事万物
1.音频或声音如何被符号化成0和1
图2.4显示的是一音频信号,即声波,声波是连续的,通常被称为模拟信号。模拟信号需经采样、量化和编码后形成数字音频,进行数字处理。所谓采样,是指按一定的采样频率对连续音频信号做时间上的离散化,即对连续信号隔一定周期获取一个信号点的过程。而量化是将所采集的信号点的数值区分成不同位数的离散数值的过程。编码则是将采集到的若干离散时间点的信号的离散数值按一定规则编码存储的过程。采样时间间隔越小或者采样频率越高,采样精度(即采样值的编码位数)越高,则采样的质量就越高,产生的数字化信息就越接近连续的声波。例如,音乐 CD 中的采样频率为每秒44 100次,这样的声音已经很逼真了。声音文件也如图像文件一样需要压缩存储,即声音编码或音频编码。声音文件的编码格式有WAV、AU、AIFF、VQF和MP3,目前流行的有MP3格式。
图2.4 音频/声音的符号化示意
小知识
视频本质上是时间序列的动态图像(如25帧/秒),也是连续的模拟信号,需要经过采样、量化和编码形成数字视频,才能保存和处理。同时,视频还可能是由视频、音频及文字经同步后形成的。因此视频处理相当于按照时间序列处理图像、声音和文字及其同步问题。典型的视频编码有国际电联的H.261、H.263,国际标准化组织运动图像专家组的MPEG系列标准,此外,在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMT及Apple公司的QuickTime等。
2.键盘是如何进行符号化的
如何通过键盘将符号输入以及如何将符号存储和在显示器上呢?如图2.5所示,键盘是由一组按键组成,可以认为这些按键是按照一定的位置排列的,当在键盘上按下某键时,会产生一个位置信号,表示是在哪一个位置按下了按键,然后根据该位置应对应的字母/数字,确认其输入了该字母/数字。位置与字母/数字的对应关系是在键盘设计生产时便确立好的。当确认其输入了该字母/数字后,便依据ASCII编码找出所按键对应的ASCII码存储,完成此功能的程序则称为编码器。读取存储的ASCII码,找出该ASCII码对应的字母或符号,查找相应的字形信息,将其显示到显示器上,完成此功能的程序则称为解码器。
图2.5 键盘的数据采集与符号化示意
3.万事万物符号化为0和1
来看更一般的情况,前面说过,图像、音频和视频都需要经过采样、量化和编码的过程。编码的规则称为协议,按什么协议编码,就需要按相应的协议还原,前者称为编码过程,后者称为解码过程。由于编码协议较为复杂,所以编码过程和解码过程可以通过软件或者硬件实现,实现编码过程的软件或硬件被称为编码器,实现解码过程的软件或硬件被称为解码器。例如,照相机、摄像机、录音机等在照相、摄录、录音时都是编码器,而在播放已录制的内容时又都是解码器。当将拍照或摄录的内容放在计算机上利用某些软件播放时,这些软件则是解码器,例如,MP3播放器、MP4播放器等。
现在的世界被认为是一个信息—物理协同的世界(Cyber Physical System)。物理世界通过物联网(Internet of Things)技术可以实现物物互联、物人互联、人人互联,究其本质是,物理世界是通过数字化的信息世界实现相互之间的连接,即“物理实体”首先转换成“数字化信息”,然后借助各种信息网络进行连接、处理,再将“数字化信息”反馈给“物理实体”或对其加以控制。
图2.6所示若要将现实世界的各种物理对象(及其状态)转换成数字化信息,首先需要研究各种物理对象的符号化问题,即物理对象的哪些方面信息需要数字化,例如,物理对象的标识(ID)信息、位置信息(Location),或如人的血压计量信息、设备的内部温度信息等自身状态信息,需要将物理对象的相关语义信息与各类符号绑定,需要研究相关的符号化计算问题。
图2.6 万事万物通过编码器进行数据采集与符号化示意
然若要实现自动化,则需要研究物理对象间信息处理的“协议/标准”。所谓的“协议/标准”,是指为正确地自动处理信息而建立的一套规则、标准或约定。例如,“8位0, 1码绑定一个符号,形成ASCII码编码标准”,即是一典型的协议。
有了协议/标准,就需要考虑物理对象的信息采集问题,即如何获取物理对象的信息。可以利用各种传感仪器(Sensor)来感知物理世界,比如照相机、数字心电仪、温度传感器、压力传感器等。一般而言,这种传感器应有两方面的功能:一是感知获取对象及状态信息;二是编码器,即将感知到的状态信息按照协议/标准转换成数字信息存储起来。
当存储成数字信息后,便可依据相应的协议/标准对其做各种处理。可以设计软件或硬件,对所存储的信息进行转换,即转换器;也可以设计软件或硬件,对所存储的信息进行传输,即传输器;当然,还可以设计软件或硬件,将所存储的信息以人容易理解和阅读的方式显示或打印,即解码器。无论编码器、转换器、传输器还是解码器,其本质都是算法,是处理信息的一种算法,笼统地称其为“编解码器”,这类编解码器也是依据协议/标准来设计和实现的。
物理对象及状态经感知,由编码器产生数字信息进行存储,再到经由解码器产生可视化的信息进行输出这一过程中,可以增加更多的编码器/解码器对所存储的信息进行转换、传输和处理,或者将其传输到互联网中进行处理后再传输回来,从而使得信息-物理世界结合得越来越密切。
但无论如何,信息表示与处理都要涉及由符号化到协议/标准,再到开发各类的编码器/解码器这一过程,因此协议与编码器/解码器是信息处理领域研究的基本内容,通过协议/标准与编码器/解码器可以不断提升计算能力,不断提升信息-物理世界的协同水平。