电子信息科学技术导论
上QQ阅读APP看书,第一时间看更新

3.2 计算机中信息的表示

计算机最主要的功能是信息处理,要使计算机能处理信息,首先必须将各类信息转换成由二进制数0和1表示的代码,这一过程称为编码。计算机能处理的数据除了数值之外,更多的是字符、图像、图形、声音等非数值信息所对应的数据。在计算机内部,各种信息都必须经过数字化编码后才能被传送、存储和处理。因此要了解计算机的工作原理,就必须了解编码知识,掌握信息编码的概念与处理技术是很重要的。

3.2.1 计算机中的数据表示

1.数制

由于计算机中采用二进制数码来表示,因此,了解和掌握数制是十分必要的。用一组统一的符号和规则来表示数的方法就称为进位计数制,简称数制。按照进位方法不同,数制又分为二进制、十进制和十六进制等。日常生活中最常用的是十进制数,而在计算机中最常用的是二进制和十六进制。数制中的三个术语分别是数位、基数和权位。

(1)数位

数位是指数码在一个数中所处的位置,例如数字1235.67,

处在0位上的数字是5;

处在1位上的数字是3;

……

处在-1位上的数字是6;

处在-2位上的数字是7。

通常小数点左侧的位数用n表示,右侧的位数用m表示。

(2)基数

基数是指在数位上所能使用的数码的个数,例如十进制计数中,每个数位上可以使用的数码为0~9十个数码,即其基数为10。

(3)权位

一个数字放在不同的数位上,表示的大小是不一样的。例如,数字6放在0位(个位)上,其大小为6,即6×100;放在1位(十位)上,表示60,即6×101。也就是说,一个数字放在不同的数位上,其大小是该数字乘一个固定的数值,这个固定的数值叫权位。

十进制数有10个基本数码:0~9,进位原则是逢10进1,基数为10,依照这个规律,二进制数的数码为0和1,进位原则是逢2进1,基数为2。十进制与二进制的对应关系见表3-1。

表3-1 十进制与二进制的对应关系表

2.计算机中为什么要使用二进制数

(1)二进制数实现容易

二进制数只有两个数码:0和1,电子器件的物理状态有两种稳定状态的很多,因而实现容易。例如,晶体管的导通和截止、脉冲的有和无等,都可以用来表示二进制的1和0。

(2)二进制数运算规则简单

例如,一位二进制数的加法运算和一位二进制数的乘法运算规则为

0+0=0 0×0=0

0+1=1+0=1 0×1=1×0=0

1+1=10(逢二向高位进一) 1×1=1

而减法和除法是加法和乘法的逆运算,根据上述规则,很容易实现二进制的四则运算。

(3)二进制数能方便地使用逻辑代数

二进制数的0和1与逻辑代数的“假”和“真”相对应,可使算术运算和逻辑运算共用一个运算器,易于进行逻辑运算。逻辑运算与算术运算的主要区别是:逻辑运算是按位进行的,没有进位和借位。

(4)二进制数记忆和传输可靠

电子元件对应的两种状态是一种质的区别,而不是量的区别,识别起来较容易。用来表示0和1的两种稳定状态的电子元件抗干能力扰强、存储量大和可靠性好,不易出错。

3.数制之间的转换

(1)非十进制数(R进制)转换成十进制数

方法:按照位权展开求和扩展到一般形式,一个R进制数,基数为R,用0,1,…,R-1共R个数字符号来表示,且逢R进一,因此,各位的位权是以R为底的幂。

一个R进制数的按位权展开式为

NR=kn-1×Rn-1+…+k0×R0+k-1×R-1+k-2×R-2+…+k-m×R-m

其中,R进制数N小数点左侧的位数有n位,右侧的位数有m位。例如,十进制数1999.123=1×103+9×102+9×101+9×100+1×10-1+2×10-2+3×10-3。从该例子可以看出,任何一个十进制数都可以按照位权展开求和,而且等式两边的结果是相等的,那么对于二进制而言当然也可以。同样八进制、十六进制等R进制转换成十进制的方法为:先为该数进行标位(方法:以小数点为分界限,整数部分方向从右向左从0,1,…进行标位,小数部分从左向右从-1,-2,…进行标位),按照位权展开求和就完成了。

(2)十进制转换成非十进制(R进制)

方法:将十进制数转换为R进制数,只要对其整数部分采用除以R取余法(余数为0为止),最后将所取余数按逆序排列;而对其小数部分,采用乘R取整法(每一次的乘积必须变为纯小数然后再作乘法,将所取整数按顺序排列)。

例如,将(179.48)10转换为二进制数。

通过分别对整数部分与小数部分求解如下:

其中,(179)10=(10110011)2,(0.48)10=(0.0111101)2(近似取7位)。即(179.48)10=(10110011.0111101)2

一个十进制的整数可以精确地转换为一个二进制整数,但是一个十进制的小数并不一定能够精确地转换为一个二进制小数。

与十进制数转换为二进制数类似,当人们将十进制小数转换为八进制或十六进制小数的时候,同样也会遇到不能精确转换的问题。那么,到底什么样的十进制小数才能精确地转换为一个R进制的小数呢?

事实上,一个十进制纯小数p能精确表示成R进制小数的充分必要条件是此小数可表示成k/Rm的形式(其中,kmR均为整数,k/Rm为不可约分数)。

下面,我们给出证明。

必要性:如p能精确表示成R进制小数,则令

p=l1R-1+l2R-2+…+liR-i (3-1)

其中,l1l2,…,li为小于R的整数,即p可精确表示成R进制小数0.l1l2li

由式(3-1)可得

p=R-il1Ri-1+l2Ri-2+…+li) (3-2)

式(3-2)中括号内显然为一整数,令其为k,又令m=i,则p=k/Rm的必要性得证。

充分性:若p=k/Rm,如kR,则p可精确表示为R进制小数0.00…k,其中0共有m-1个;如k>R则可把k表示成

k=qR+a (3-3)

其中,qa均为整数且aR,因此有

p=q/Rm-1+a/Rm (3-4)

式(3-4)中,若qR,则命题得证;若qR,则继续重复式(3-3)直至qR为止。

3.2.2 计算机中的数值表示

数值型数据由数字组成,表示数量,用于算术操作中。例如,你的年收入就是一个数值型数据,当需要计算个人所得税时就要对它进行算术操作。本节我们将讨论计算机中数字信息的表示方法。

在计算机中,数值型的数据有两种表示方法,一种叫做定点数,另一种叫做浮点数。所谓定点数,就是在计算机中所有数的小数点位置固定不变。定点数有两种:定点小数和定点整数。定点小数将小数点固定在最高数据位的左边,因此,它只能表示小于1的纯小数。定点整数将小数点固定在最低数据位的右边,因此定点整数表示的也只是纯整数。由此可见,定点数表示数的范围较小。

为了扩大计算机中数值数据的表示范围,我们将12.34表示为0.1234×102,其中0.1234叫做尾数,10叫做基数,可以在计算机内固定下来。2叫做阶码,若阶码的大小发生变化,则意味着实际数据小数点的移动,我们把这种数据叫做浮点数。由于基数在计算机中固定不变,因此,我们可以用两个定点数分别表示尾数和阶码,从而表示这个浮点数。其中,尾数用定点小数表示,阶码用定点整数表示。在计算机中,无论是定点数还是浮点数,都有正负之分。在表示数据时,专门有1位或2位表示符号,对单符号位来讲,通常用“1”表示负号,用“0”表示正号;对双符号位而言,则用“11”表示负号,“00”表示正号。通常情况下,符号位都处于数据的最高位。

(1)定点数的表示

一个定点数,在计算机中可用不同的码制来表示,常用的码制有原码、反码和补码三种。不论用什么码制来表示,数据本身的值并不发生变化,数据本身所代表的值叫做真值。

1)原码的表示。如果真值是正数,则最高位为0,其他位保持不变;如果真值是负数,则最高位为1,其他位保持不变。

2)反码的表示。如果真值是正数,则最高位为0,其他位保持不变;如果真值是负数,则最高位为1,其他位按位求反。

反码跟原码相比较,符号位虽然可以作为数值参与运算,但计算完后,仍需要根据符号位进行调整。另外0的反码同样也有两种表示方法:+0的反码是00000000,-0的反码是11111111。为了克服原码和反码的上述缺点,人们又引进了补码表示法。补码的作用在于能把减法运算转化成加法运算,现代计算机中一般采用补码来表示定点数。

3)补码的表示。若真值是正数,则最高位为0,其他位保持不变;若真值是负数,则最高位为1,其他位按位求反后再加1。

(2)浮点数的表示

浮点数的表示法类似于科学计数法,任一数均可通过改变其指数部分,使小数点发生移动,如数23.45可以表示为101×2.345、102×0.2345、103×0.02345等各种不同形式。浮点数的一般表示形式为N=2E×D,其中,D称为尾数,E称为阶码,如图3-3所示。

图3-3 浮点数的表示图

对于不同的机器,阶码和尾数各占多少位、分别用什么码制进行表示都有具体规定。在实际应用中,浮点数的表示首先要进行规格化,即转换成一个纯小数与2m之积,并且小数点后的第一位是1。

例如,写出浮点数(-101.11101)2的机内表示(阶码用4位原码表示,尾数用8位补码表示,阶码在尾数之前)。

解:(-101.11101)2=(-0.10111101)2×23可见阶码为3,用原码表示为0011,尾数为-0.10111101,用补码表示为1.01000011。因此,该数在计算机内表示为:00111.01000011。

3.2.3 计算机中非数值信息的编码

我们知道,计算机只认识“0”、“1”代码,因此,为了使计算机能够识别其他的数和字符,必须对其进行二进制编码。下面介绍几种常见的编码及其特性。

1.十进制数的二进制编码

在计算机中,十进制数除了被转换成二进制数参加运算外,还可以直接进行输入和运算。但此时的十进制数是二进制编码的十进制数(即形式上是“0”、“1”代码,实质上却为十进制数)。

用一定规则组成的4位二进制数来表示一位十进制数的方法,称为十进制数的二进制编码或二进制编码的十进制数(Binary Coded Decimal,BCD)。由于十进制数的最大数符为9,故至少需要4位二进制数码才行。一般采用4位二进制数来表示一位十进制数,而4位二进制数的组合有16种,十进制数只取其中10种,还多余6个代码。因此,十进制数的二进制编码方法有多种,不同的编码方法产生不同的BCD码,而目前使用最广泛的BCD码是8421码。8421码是用4位二进制编码表示一位十进制数,且逢十进位。4位二进制码的各位的权值自左到右分别为8、4、2、1,故称8421码。即取4位二进制数的前面10种代码0000~1001依次表示0~9这10个数符。8421码中不允许出现1010~1111这6个代码。注意:不能将其与二进制数混淆起来。例如,(01000111)BCD=(47)10;(01000111)2=(71)10

2.字符的二进制编码

字母、数字、汉字和符号统称为字符,而用来表示字符的二进制码称为字符编码。人们使用计算机的基本手段是通过键盘与计算机交互,从键盘上敲入的各种命令都是以字符形式体现的。然而,由于计算机只识别“0”、“1”代码,这就需要对字符进行编码,并由机器自动地转换为“0”、“1”代码形式存入计算机中。常用的字符编码有ASCII码和汉字编码等。

(1)ASCII码

ASCII(American Standard Code for Information Interchange)码常用7位二进制进行编码,共可表示27=128个字符。ASCII码的最高位b7(最低位为b0)常作为奇偶校验位。所谓奇偶校验,是指代码传送过程中用来检验是否出现错误的一种方法,分奇校验和偶校验两种。常见字符的ASCII码如下:‘A’=41H,‘B’=42H,…等依次加一即得;‘a’=61H,‘b’=62H,…等依次加一即得;‘0’=30H,‘1’=31H,…等依次加一即得。ASCII码字符表见表3-2(本表ASCII值为十进制)。

表3-2 ASCⅡ码字符表

(2)汉字编码

计算机中汉字的表示也是用二进制编码,同样是人为编码的。根据应用目的的不同,汉字编码分为外码、交换码、机内码和字形码。汉字编码处理信息过程如图3-4所示。

图3-4 汉字编码处理信息过程图

1)汉字输入码(外码):方便人工通过输入设备输入汉字而设计的,如区位码、智能ABC码、五笔字型码。

2)国标码(交换码):用于汉字信息处理系统之间或通信系统之间进行信息交换,国标GB2312-1980制定了汉字交换码的标准。国标码任何一个汉字或图形符号都用两个7位的二进制数表示,计算机中用两个字节表示,每个字节的最高位为0,剩余7位为汉字或图形的二进制编码。国标码字符集中收集了常用汉字和图形符号7445个,其中图形符号682个,汉字6763个,根据汉字使用频率的高低、构词能力的强弱、实际用途的大小划分为两级汉字,一级汉字3755个,二级汉字3008个。

区位码是国标码的另一种表现形式,把国标GB2312-1980中的汉字、图形符号组成一个94×94的方阵,分为94个“区”,每区包含94个“位”,其中“区”的序号为01~94,“位”的序号也是01~94。94个区中位置总数为94×94=8836个,其中7445个汉字和图形字符中的每一个占一个位置后,还剩下1391个空位,这1391个位置空下来保留备用。所以给定区位值,用4位数字都可以确定一个汉字或图形符号,其中前两位是“区”号,后两位是“位”号,如“汉”字的区位码是“2626”、“吴”字的区位码是“4666”、“邢”字的区位码是“4847”等(一般区位码用十进制表示)。

3)机内码:供计算机系统内部进行汉字存储、加工处理、传输统一使用的代码,俗称变形国标码。汉字机内码、国标码和区位码三者之间的关系为:区位码(十进制)的两个字节分别转换为十六进制后加2020H得到对应的国标码;机内码是汉字交换码(国标码)两个字节的最高位分别加1,即汉字交换码(国标码)的两个字节分别加80H得到。用公式表示为:国标码=区位码+2020H;机内码=国标码+8080H;机内码=区位码+A0A0H。如“汉”字的区位码用十六进制表示后是“1A1A”,“吴”字的区位码用十六进制表示后是“2E42”,“邢”字的区位码用十六进制表示后是“302F”,然后计算出国标码分别对应为“3A3A”“4E62”“504F”,最后计算出机内码分别对应为“BABA”“CEE2”“D0CF”。

4)字形码:字形码是汉字的输出码,输出汉字时都采用图形方式,无论汉字的笔画多少,每个汉字都可以写在同样大小的方块中,通常用16×16点阵来显示汉字。