计算机的主要功能是信息处理。计算机除了能处理数值数据,还能处理字符、图像、图形、声音等非数值信息对应的非数值数据。要使计算机能处理信息,首先必须将各类信息转换成由二进制的数码0和1组合表示的代码。在计算机内部,各种信息都必须经过二进制编码才能被传输、存储和处理。因此,要了解计算机的工作原理,就必须了解和掌握信息编码的概念与处理技术。
所谓编码,就是将少量的基本符号按照一定的规则组合,来表示大量、多样、复杂的信息。基本符号的种类和这些符号的组合规则是信息编码的两大要素。典型的编码例子有用26个英文字母表示英文词汇,用10个阿拉伯数字表示数值等。计算机广泛采用由0和1两个基本符号组合而成的二进制编码方式。
数制是记数的法则,指用一组固定的符号和统一的规则来表示数值的方法。数制有多种形式,我们最熟悉的是十进制,而计算机中使用更多的是二进制、八进制和十六进制等数制。
数制中的3个术语如下。
● 数码:用一组记数符号来表示一种数制的数值,这些记数符号被称为“数码”。
● 基数:数制所允许使用的数码个数。
● 位权(权值):某数制中每一位所对应的单位值。位权=基数 i , i 为数码所在位的编号,从小数点向左依次为0, 1, 2, 3等,自小数点向右依次为−1, −2, −3等。
十进制有10个数码0~9,进位规则是逢10进1,基数为10。依照这个规则,二进制的数码为0和1,进位规则是逢2进1,基数为2。
部分十进制数与二进制数的对照表如表1-2所示。
表1-2部分十进制数与二进制数的对照表
(1)实现容易
二进制只有两个数码:0和1。而很多电子器件和信号有两种稳定的物理状态,所以容易用二进制来表示。例如,晶体管的导通和截止、脉冲信号的有和无等,都可以用二进制的1和0表示。
(2)运算规则简单
例如,1位二进制数的加法运算和1位二进制数的乘法运算规则为
0+0=0;0×0=0
0+1=1+0=1;0×1=1×0=0
1+1=10(逢2向高位进1);1×1=1
而减法和除法是加法和乘法的逆运算。
根据上述规则,很容易实现二进制数的四则运算。
(3)能方便使用逻辑代数
二进制的0和1分别与逻辑代数的“假”和“真”相对应,所以二进制的算术运算和逻辑运算可共用一个运算器,且二进制数易于进行逻辑运算。逻辑运算与算术运算的主要区别在于,逻辑运算是按位进行的,没有进位和借位。
(4)存储和传输可靠
电子元器件对应的两种状态(导通与截止)是一种质的区别,而不是量的区别,识别起来较容易。用0和1表示电子元器件的两种稳定状态,工作可靠,抗干扰性强,便于存储,不易出错。
虽然计算机采用二进制,但二进制数的数位较多,不便书写和记忆,因此我们平时常用的是十六进制、十进制和八进制。
八进制有8个基本数码,即0、1、2、3、4、5、6、7,进位规则是逢8进1。
十六进制有16个基本数码,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,进位规则是逢16进1。
下面介绍各数制之间的转换方法。
转换方法:按位权展开求和,示例如下。
(1)二进制数转换成十进制数
例:(1100.11) 2 =1×2 3 +1×2 2 + 0×2 1 +0×2 0 +1×2 -1 +1×2 -2 =8+4+ 0+0+0.5+0.25=(12.75) 10
(2)八进制数转换成十进制数
例:(154) 8 =1×8 2 +5×8 1 +4×8 0 =64+40+4=(108) 10
(3)十六进制数转换成十进制数
例:(6C) 16 =6×16 1 +12×16 0 =96+ 12=(108) 10
转换方法:整数部分采用除基数取余法(倒着写),小数部分采用乘基数取整法(即用小数部分乘基数,将得到的整数部分记录下来,再用剩下的小数部分继续乘基数,保留并记录整数部分,直到小数部分为0或得到足够精度的数)。下面通过例子给予说明。
(1)十进制数转换成二进制数
例:(100.345) 10 =(1100100.01011) 2
(2)十进制数转换成八进制数、十六进制数
例:(100) 10 =(144) 8 =(64) 16
在计算机中,数据的单位有位和字节等。
● 位(bit):构成计算机信息的最小单位,每一位用0或1来表示,如二进制数10011101 是由8个数位组成的。
● 字节(byte):计算机中数据的最小存储单元,常用B表示。计算机中由8位二进制数组成1字节,1字节可存放一个半角英文字符的编码,2字节可存放一个汉字的编码。
计算机中的数据计量单位之间的换算关系如下。
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
计算机中的信息是指二进制数所表达的具体内容。在计算机中,数据以二进制数的形式存在,同样,文字、声音、图像等信息也都以二进制数的形式存在,但是人们习惯使用十进制数,因此就出现了一些转换码,可以对二进制数和十进制数进行转换。
数字编码是用二进制数码按照一定规律来描述十进制数的一种编码,其中最常见的是8421码,或称BCD(Binary Coded Decimal,二进制编码的十进制)码。它利用4位二进制数进行编码,从高至低的位权分别为2 3 、2 2 、2 1 、2 0 ,即8、4、2、1,用来表示一位十进制数。表1-3列出了十进制数码与BCD码的对应关系。
表1-3十进制数码与BCD码的对应关系
根据这种对应关系,我们可以将任何十进制数与BCD码进行转换。
例:(52) 10 =(01010010) B CD
(1001010010000101) BCD =(9485) 10
计算机除处理数字外,还需要把符号、文字等用二进制数表示,这样的二进制数被称为字符编码。
计算机中常用的西文字符编码有两种:EBCDIC(Extended Binary Coded Decimal Interchange Code,扩充的二进制编码的十进制交换码)和ASCII(American Standard Code for Information Interchange,美国信息交换标准码)。EBCDIC是IBM公司为其大型计算机开发的8位字符编码,微型计算机则通常采用ASCII。下面主要介绍ASCII。
ASCII是被国际标准化组织(International Standardization Organization,ISO)采纳的、计算机中普遍采用的一种字符编码。计算机中常用的基本字符包括十进制数码0~9、大写英文字母A~Z、小写英文字母a~z,以及运算符号、标点符号、控制符等,它们都能被转换成二进制编码形式,以便被计算机识别。表1-4列出的就是ASCII。
表1-4ASCII
在ASCII中,每个字符都可以用二进制编码表示。例如,要确定字符A的ASCII,可以从表1-4中查到字符A的高位是0100,低位是0001,将高位和低位拼起来就是A的ASCII,即01000001,十六进制形式记作41H。在计算机中用1字节(8位)来存储一个字符的ASCII,其中低7位二进制数对应字符的编码,每字节的最高位一般置0,在数据传输时该位可用作奇偶校验位。
汉字在计算机中也采用二进制的数字化信息编码。汉字的数量大,常用的汉字也有几千个,因此汉字编码比ASCII要复杂得多,只用1字节(8位)来存储是不够的。目前的汉字编码方案有2字节、3字节甚至4字节的。在汉字信息处理系统中,输入、内部处理、输出这3个过程对汉字的要求不同,所用代码也不尽相同,主要有用于汉字输入的输入码、机内处理和存储等的机内码、用于显示及打印的字形码。由于不同过程使用的代码不同,汉字信息处理系统在处理汉字时,要进行输入码、机内码、字形码等一系列的汉字代码转换,具体转换过程如图1-2所示。
图1-2汉字代码的转换过程
(1)输入码(外码)
由于汉字的数量大,键盘上的键位无法与每个汉字一一对应。要解决汉字与键位的对应问题,就需要用到输入码。
输入码是指通过各种输入设备,以不同方式将汉字输入计算机所使用的代码。每一种输入码都与相应的输入编码规则有关。根据输入编码规则,输入码一般可分为数字码、音码、音形码等,例如五笔字型输入法就是一种典型的字形码输入法。
(2)机内码(内码)
机内码用以将输入时使用的多种输入码进行统一转换并存储,以方便机内的汉字处理。目前,机内码有几种不同的编码方式,如简体的GB/T 2312—1980,繁体的BIG5、GB/T 13000—2010、Unicode等。
GB/T 2312—1980是由中国国家标准总局在1980年发布,1981年5月1日开始实施的国家标准汉字编码集,即《信息交换用汉字编码字符集基本集》,基本集中共有7445个字符符号,其中,非汉字符号682个,汉字符号6763个(包含一级汉字3755个,二级汉字3008个)。
(3)字形码(输出码)
汉字的字形码是表示汉字字形信息的编码,它与汉字内码一一对应。每个汉字的字形码是预先存放在计算机内的,字形码的集合被称为字库。当输出汉字时,计算机根据内码,在字库中查到其字形码,得知其字形信息,然后就可以显示或打印输出了。
描述汉字字形的方法主要有点阵字模法和轮廓字模法两种。点阵字模法用黑白点阵列来表现字形,该方法简单,但放大后会出现锯齿现象。轮廓字模法则采用数学方法来描述汉字笔画的轮廓,如中文Windows系统采用的TrueType字库;运用这种方法的优点是字形精度高,缺点是输出前要经过复杂的数学运算处理。
常用进制数的转换通过手工计算是比较烦琐的。而使用Windows系统自带的计算器组件,可以方便地将十进制数转换为二进制数、八进制数和十六进制数,或者将二进制数转换为十进制数、八进制数和十六进制数。
步骤1 单击Windows 10桌面左下角的“开始”按钮,在弹出的菜单中选择“计算器”。
步骤2 在“计算器”窗口中,单击左上角的 按钮,在菜单中选择“程序员”,如图1-3所示。
步骤3 默认的输入状态为十进制(DEC)数,这里输入65,可以看到,已经自动显示出了对应的二进制(BIN)数01000001、八进制(OCT)数101、十六进制(HEX)数41,如图1-4所示。
图1-3选择“程序员”
图1-4将十进制数转换为其他进制数
步骤4 单击进制列表中的BIN,切换到二进制数输入状态,输入1101101,可以看到,已经自动显示出了对应的八进制数155、十进制数109、十六进制数6D,如图1-5所示。
图1-5将二进制数转换为其他进制数