1.2 计算机中信息的表示
计算机要处理的内容是多种多样的,如数字、文字、符号、图形、图像和语言等。但是计算机无法直接“理解”这些内容,所以在计算机内部专门有一种表示信息的形式。
1.2.1 信息和数据
(1)信息和数据的概念
信息是指现实世界事物的存在方式或运动状态的反应。信息具有可感知性、可存储性、可加工性、可传递性和可再生性等自认属性。
信息处理是指信息的收集、加工、存储、传递及使用过程。
数据是对客观事物的符号表示。数值、文字、语言、图形、图像等都是不同形式的数据。
信息和数据这两个概念既有联系又有区别。数据是反映客观事物属性的记录,是信息的具体表现形式或载体;信息是数据的语义解释,是数据的内涵。数据经过加工处理之后,就成为信息;而信息需要经过数字化转变成数据才能存储和传输。数据是数据采集时提供的,信息是从采集的数据中获取的有用信息。
(2)计算机中的信息
计算机内部均采用二进制来表示各种信息,但计算机与外部交互仍采用人们熟悉和便于阅读的形式,如十进制数、文字、声音、图形图像等,其间的转换则由计算机系统的硬件和软件来实现。那么在计算机内部为什么要用二进制来表示各种信息呢?主要有以下几个方面的原因。一是电路简单,易于表示。计算机是由逻辑电路组成的,逻辑电路通常只有两个状态。例如开关的接通和断开,电压的高与低等。这两种状态正好用来表示二进制的两个数码0和1。若是采用十进制,则需要有十种状态来表示十个数码,实现起来比较困难。二是可靠性高。两种状态表示两个数码,数码在传输和处理中不容易出错,因而电路更加可靠。三是运算简单。二进制数的运算规则简单,无论是算术运算还是逻辑运算都容易进行。四是逻辑性强。计算机不仅能进行数值运算而且能进行逻辑运算。逻辑运算的基础是逻辑代数,二进制的两个数码1和0,恰好代表逻辑代数中的“真”和“假”。
(3)计算机中的数据单位
计算机中数据最小的单位是位,存储容量的基本单位是字节,除此之外还有千字节、兆字节、吉字节等。
① 位(bit) 位是数据的最小单位,用来表示存放的一位二进制数,即0或1。在计算机中,采用多个数字(0和1的组合)来表示一个数时,其中的每一个数字称为1位。
② 字节(Byte) 字节是计算机表示和存储信息的最常用、最基本单位。1个字节由8位二进制数组成,即1Byte=8bit。
比字节表示的存储空间更大的有千字节、兆字节、吉字节等,不同数据单位之间的换算关系为:
字节B 1Byte=8bit
千字节kB 1kB=1024B=210B
兆字节MB 1MB=1024kB=1024×1024B
吉字节GB 1GB=1024MB=1024×1024kB
太字节TB 1TB=1024GB=1024×1024MB
③ 字长 人们将计算机一次能够并行处理的二进制位称为该机器的字长。字长直接关系到计算机的精度、功能和速度,是计算机的一个重要指标,字长越长,处理能力就越强。计算机型号不同,其字长也不同,通常字长是字节的整数倍,如8位、16位、32位、64位等。
1.2.2 进位计数制及其转换
在日常生活中,最常使用的是十进制数,而计算机内部在进行数据处理时,使用的是二进制数,由于二进制表示数时书写较长,有时为了理解和书写方便也用到八进制和十六进制,但它们最终都要转化成二进制数后才能在计算机内部进行加工和处理。
(1)进位计数制
进位计数制是利用固定的数字符号和统一的规则来计数的方法。计算机中常见的有十进位计数制、二进位计数制、八进位计数制、十六进位计数制等。
一种进位计数制包含一组数码符号和三个基本因素。
数码:一组用来表示某种数制的符号。例如,十进制的数码是0、1、2、3、4、5、6、7、8、9;二进制的数码是0、1。
基数:某数制可以使用的数码个数。例如,十进制可以使用的数码有10个,基数为10;二进制可以用的数码只有0和1两个,基数为2。
数位:数码在一个数中所处的位置(小数点左侧的第一位为0开始)。
权:权是以基数的底,数位为指数的整数次幂,表示数码在不同位置上的数值。
例如:十进制12670中,数码6的数位是2,权是102。
表1-2中十六进制的数码除了十进制的10个数字符号外,还使用了6个英文字母:A,B,C,D,E,F。它们分别等于十进制的10,11,12,13,14,15。
表1-2 计算机中常用的几种进位计数制的表示
表1-3是十进制0~15与等值的二进制、八进制、十六进制的对照表。可以看出采用不同进制表示同一数时,基数越大,则使用的位数越少。比如十进制10,需要4位二进制来表示,只需要2位八进制、1位十六进制来表示。这也是为什么在程序书写中一般采用八进制或十六进制表示数据的原因。
(2)常用进制之间的转换
① N进制转换为十进制 在十进制数中1234可以表示为以下多项式:
(1234)10=1×103+2×102+3×101+4×100
式中,103、102、101、100是各个数码的权,可以看出将各个位置上的数字乘上权值再求和就可以得到这个数。所以,将N进制数按权展开再求和就可以得到对应的进制数,这就是将N进制数转换为十进制数的方法。
表1-3 不同进制数的对照表
例如:
(10111)2 =1×24+0×23+1×22+1×21+1×20
=16+0+4+2+1
=(23)10
(217)8 =2×82+1×81+7×80
=128+8+7
=(143)10
(6C)16 =6×161+12×160
=96+12
=(108)10
如果一个N进制中既有整数部分又有小数部分,仍然可按权展开求和将其转换成对应的十进制数。
例如:
(1011.11)2 =1×23+0×22+1×21+1×20+1×2-1+1×2-2
=8+2+1+0.5+0.25
=(11.75)10
② 十进制数转换为N进制数 将十进制数转换为N进制数时由于整数部分和小数部分采用不同的方法,所以可以将整数和小数分开转换后再连接起来即可。
a.整数 将一个十进制整数转换为N进制整数可以采用“除基取余”法,即将十进制整数连续的除以N进制数的基数取余数,直到商为0为止,最先取得的余数放在最右边。
【例1】将十进制整数125分别转换为二进制数和八进制数。
(125)10=(7D)16
(125)10=(1111101)2
b.小数 将一个十进制小数数转换为N进制小数采用“乘基取整”法,即将十进制小数不断地乘以N进制数的基数取整数,直到小数部分为0或达到精度要求为止(存在小数部分永远不会达到0的情况),取得的整数从小数点之后自左往右排列,取有效精度,最先取得的整数放在最左边。
【例2】将十进制小数0.625转换成二进制数。
(0.625)10=(0.101)2
【例3】将十进制数147.16转换成八进制数,要求精确到小数点后4位。
(147.16)10=(223.1217)8
③ 二进制数与八进制数、十六进制数的相互转换 信息在计算机内部都用二进制数来表示,但二进制的位数比较长,比如一个十进制数 128,用等值的二进制数来表示就需要8位,书写和识别起来很不方便也不直观。而八进制和十六进制数比二进制数就要短得多,同时二进制、八进制和十六进制之间存在特殊的关系:81=23;161=24,即1位八进制数相当于3位二进制数,1位十六进制数相当于4位二进制数,因此它们之间转换也非常方便。在书写程序或数据时往往采用八进制数或十六进制数形式来表示等值的二进制数。
如表1-3所示根据二进制数和八进制数、十六进制数之间的关系,将二进制数转换为八进制数时,以小数点为起点向左右两边分组,每3位为一组,两头不足添0补齐3位(整数高位补0,小数低位补0对数的大小不会产生影响)。
例如:将二进制数(1011011.10111)2转换成八进制数:
( 001 011 011 . 101 110)2=(133.56)8
1 3 3 5 6
将二进制数转换为十六进制数时,以小数点为起点向左右两边分组,每4位为一组,两头不足添0补齐4位。
例如:将二进制数(1011011.10111)2转换成十六进制数。
(0101 1011 . 1011 1000)2=(3B.B8)16
3 B B 8
反过来,将八进制数或十六进制数转换成二进制数,只要将1位八进制数或者十六进制数对应转换为三位或者4位二进制数即可。例如:
(217.35)8=(010 001 111 . 011 101)2=(10001111.011101)2
2 1 7 3 5
(46E.A8)16=(0100 0110 1110.1010 1000)2=(10001101110.10101)2
4 6 E A 8
注意:整数部分的高位0和小数部分的低位0可以不写。
1.2.3 计算机中非数值信息的表示
日常生活中需要计算机处理的信息是多种多样的,如文字、声音、图片、符号、图形等等,而计算机只能识别二进制数,为了让计算机能直接“读懂”这些信息,我们需要将这些非数值信息采用数字化编码的形式将其转换为计算机能直接识别的“0”和“1”。非数值信息非常多,我们重点了解两类非数值信息的编码方式,一类是西文字符,一类是中文汉字。
(1)字符编码
目前采用的字符编码主要是ASCII码,又叫美国信息交换标准码(American National Standard Code for Information Interchange),是由美国国家标准学会制定的。它起始于上世纪50年代后期,在1967年定案。
ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符,其中7位ASCII码叫做标准ASCII码,8位ASCII码叫做扩展ASCII码。标准ASCII码用一个字节(8位)来表示一个字符,最高位为0,剩下的 7位二进制数共有27=128个不同的编码,包括了0~9共10个数字、52个大小写英文字母、32个标点符号和运算符以及34个控制字符。常用字符的ASCII编码见表1-4。
表1-4 标准ASCII码表
从ASCII码表可以看出,0~9,A~Z,a~z按照从小到大的顺序排列,且小写字母比它对应的大写字母的ASCII值大32。比如字符“a”的ASCII编码是1100001,对应的十进制数是97,则字符“b”的ASCII码值就是98,字符“A”的ASCII码就是65。
(2)汉字编码
① 汉字编码字符集 ASCII码只对英文字母、数字、标点符号、控制字符等进行了编码,而计算机也需要处理、显示、存储汉字,因而对汉字字符也需要进行编码。为了满足国内在计算机中使用汉字的需要,中华人民共和国国家标准化管理委员会发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。其中最有影响的是于1980年发布的《信息交换用汉字编码字符集 基本集》,标准号为GB 2312—80,因其使用非常普遍,也常被通称为国标码。
GB 2312是一个简体中文字符集,由6763个常用汉字和682个全角的非汉字字符组成。其中汉字根据使用的频率分为两级:一级汉字3755个,按汉语拼音字母的次序排列;二级汉字3008个,按偏旁部首排列。由于字符数量比较大,GB 2312采用了二维矩阵编码法对所有字符进行编码。首先构造一个94行94列的方阵,对每一行称为一个“区”,每一列称为一个“位”,然后将所有字符填写到方阵中。这样所有的字符在方阵中都有一个唯一的位置,这个位置可以用区号、位号合成表示,称为字符的区位码。如汉字“国”出现在第25区(行)的第90位(列)上,其区位码为2590。因为区位码同字符的位置是完全对应的,因此区位码同字符之间也是一一对应的。这样所有的字符都可通过其区位码转换为国标码。转换的方法是将汉字的区位码中的区号和位号分别转换成十六进制数,再分别加上20H,就得到了该汉字的国标码。如汉字“国”的区位码是2590D,则其国标码为397AH。
GB 2312字符在计算机中存储是以其区位码为基础的,其中汉字的区码和位码分别占一个存储单元,每个汉字占两个存储单元。实际存储时,将汉字的区位码转换成存储码进行存储。
在我国台湾、香港与澳门地区,使用的是繁体汉字,而1980年发布的GB 2312面向简体中文字符集,并不支持繁体汉字。为统一繁体字符集编码,1984年台湾五大厂商宏碁、神通、佳佳、零壹以及大众一同制定了一种繁体中文编码方案,因其来源被称为五大码,英文写作Big5,后来按英文翻译回汉字后,普遍被称为大五码。
② 汉字的几种编码 汉字从输入、存储处理到输出都进行了不同方式的编码,计算机对汉字的处理过程实际上就是汉字各种编码间的转换过程,这些编码主要包括汉字输入码、汉字内码、汉字字形码等。
a.汉字输入码 为通过键盘将汉字输入计算机而编制的各种代码叫做汉字输入码,也叫外码。目前汉字输入的编码研究非常多,已多达数百种,主要包括拼音编码和字型编码。常用的微软拼音、智能ABC、搜狗拼音等就是拼音编码,五笔字型输入法就是字型编码。
b.汉字内码 也叫机内码,汉字内码是在设备和信息处理系统内部存储、处理、传输汉字用的代码。一个汉字无论采用何种输入码,进入计算机后都会被转化为机内码才能进行传输、处理。目前的规则是将国标码的高位字节、低位字节各自加上128D或80H。例如,“国”字的国标码是397AH,每个字节加上80H,“国”字的内码为B9FAH。这样做的目的是使汉字内码区别于西文的ASCII,因为每个西文字母的ASCII的高位均为0,而汉字内码的每个字节的高位均为1。
c.汉字字形码 经过计算机处理后的汉字信息,如果要显示或者打印输出就需要将汉字内码转化为人们能识别的汉字,用于在显示屏或打印机输出的就是汉字字形码,也称为字模码。通常用点阵、矢量表示。
用点阵表示时,字形码指的就是这个汉字字形点阵的代码。根据输出汉字的要求不同,点阵的多少也不同。简易型汉字为16×16点阵、普通型汉字为24×24点阵、提高型汉字为32×32点阵、48×48点阵等。如果是24×24点阵,每行24个点就是24个二进制位,存储一行代码需要3个字节。那么,24行共占用3×24=72个字节。计算公式:每行点数×行数/8。依此,对于48×48的点阵,一个汉字字形需要占用的存储空间为48×48/8=288个字节。