任务二 认识计算机内的信息表示
任务描述
计算机的主要功能是处理各种信息,如数值计算、文字处理、声音、图形和图像等。这些信息都是以二进制代码的形式出现的,即以0和1两种代码进行计算和存储信息。本任务将介绍计算机中数据表示的各种数制及它们的相互转换,以及非数值数据的编码规则。
本任务要求学习者了解计算机二进制信息表示,了解进位计数制,掌握不同数制之间的转换,掌握二进制的运算规则,熟悉信息编码,熟悉计算机中数据的单位。
任务实施
一、计算机二进制信息表示的优越性
1.可行性
若用十进制,需用0、1、2、3、4、5、6、7、8、9等不同的10个基数,用电子技术实现这10种状态很困难;而用二进制,只需要0、1两个基数来表示两个状态,在硬件实现上最为容易。例如,电灯的亮和灭,晶体管的导通和截止等即可表示0和1两种状态。
2.可靠性
用二进制数只有两个状态,数字的转移和处理不易出错,可以提高计算机的可靠性。
3.简单性
二进制运算法则简单,例如:二进制的加法、乘法法则都只有三个,运算法则少,使计算机运算器的结构大大简化。
4.逻辑性
二进制仅有的两个符号0、1正好与逻辑代数的两个值“假”“真”相对应,从而为计实现逻辑运算和逻辑判断提供了方便。
二、进位计数制
数制又称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。编码是采用少量的基本符号,选用一定的组合原则,以表示大量复杂多样的信息的技术。计算机是处理信息的工具,任何信息都必须转换成二进制形式数据后才能由计算机进行处理、存储和传输。这是由于二进制编码具有运算简单、电路实现方便、成本低廉等优点。在计算机内部使用二进制表示各种信息,而在输入、显示或打印输出时,不能用二进制数,因为人们不熟悉二进制数且习惯于用十进制数计数。在计算机程序编写中,还经常采用八进制和十六进制数,这样存在同一个数可用不同数制表示的现象。
1.数制的相关术语
先看一个十进制数的例子。
例如:
(888.88)10=8×100+8×10+8×1+8×0.1+8×0.01
=8×102+8×101+8×100+8×10-1+8×10-2
从上面的式子中可以看到,同一数字符号的位置不同,它所代表的数值也不同,这就是经常所说的个位、十位、百位、……,一种进位计数制包含三种基本要素:数码、基数、位权。
(1)数码
一组用来表示某种数的符号。如:1、2、3、C、D。
(2)基数
数制中所用数码的个数,若用K表示,则称这种数制为K进制,其进位规律是“逢K进一”。如大家所熟悉的十进制数的数码是0、1、2、3、4、5、6、7、8、9,总共有10个数码,所以基数是10,其进位规律是“逢十进一”。
(3)位权
数码在不同位置上的权值。在进制数中,处于不同数位的数码,代表不同的数值,这个数位的数的数值是由这位数码的值乘上这个位置的固定常数构成,这个固定常数称为位权。
2.常用的数制
数制是人们利用符号进行计数的科学方法。在采用进位计数的数字系统中,如果只用R个基本符号(如0,1,2,…,R-1)表示数值,则称其为基R数制,R称为该数制的基数,而数制中每一固定位置对应的单位值称为位权,第n位的位权为Rn-1数制有很多种,常用的数制有十进制、二进制、八进制和十六进制。
(1)十进制数
特点是采用0、1、2、3、4、5、6、7、8、9共10个不同的数字符号表示其数码,“逢十进一,借一当十”。对于任意一个十进制数都可以表示成按权展开的多项式。例如:
1946=1×103+9×102+4×101+6×100
2014=2×103+0×102+1×101+4×100
38.25=3×101+8×100+2×10-1+5×10-2
(2)二进制数
二进制数的数码是用两个数0和1表示,基数是2,“逢二进一,借一当二”。对于二进制数,其整数部分各数位的权,从最低位开始依次是1,2,4,8,…,写成2的幂就是20,21,22,23,…;其小数部分各数位的权,从最高位开始依次是0.5,0.25,0.125,…,写成2的幂就是2-1,2-2,2-3,…。对于任意一个二进制数也都可以表示成按权展开的多项式。为了区别于其他的进制数,除了在数的下角标注2外,还可以在数的后面加一个大写字母B。例如:
(11110101)2=1×27+1×26+1×25+1×24+0×23+1×22+0×21+1×20
10.01B=1×21+0×20+0×2-1+1×2-2
二进制数只含有两个数字0和1,因此可用大量存在的具有两个不同的稳定物理状态的元件来表示。例如,可用晶体管的断开和导通,磁性元件的反向和正向,脉冲电位的低和高,指示灯的不亮和亮,继电器的断开和接通等,来分别表示二进制数字0和1。计算机中采用具有两个稳定状态的电子或磁性元件表示二进制数,这比十进制的每一位要用具有10个不同的稳定状态的元件来表示实现起来容易得多,工作起来也稳定得多。二制数的运算规则简单,使得计算机中的运算部件的结构相应变得比较简单。二进制数的两个数字0和1与逻辑代数的逻辑变量取值一样,从而可采用二进制数进行逻辑运算,这样就可以应用逻辑代数作为工具来分析和设计计算机中的逻辑电路,使得逻辑代数成为计算机设计的数学基础.
(3)八进制数
在计算机内部一切信息的存储、处理与传送均采用二进制的形式。但由于二进制数所需位数较多,阅读与书写很不方便。为此在阅读与书写时通常用十六进制或八进制来表示,这是因为十六进制和八进制与二进制之间有着非常简单的对应关系。由于八进制数的基数8是二进制数的基数2的3次幂,即23=8,所以一位八进制数相当于3位二进制数,使得八进制数与二进制数之间的转换十分方便。它也可以表示成按权展开的多项式。例如:
(207.13)8=2×82+0×81+7×80+1×8-1+3×8-2
各位的权值为8的幂次方。为了区别于其他进制数,除了在数右下角标注8外,还可以在数的后面加一个大写字母O来表示8进制。如207.13O。
(4)十六进制数
十六进制数基数是16,有16个基本数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,“逢十六进一,借一当十六”。由于十六进制数的基数16是二进制数的基数2的4次幂,即24=16,所以一位十六进制数相当于4位二进制数,这样使得十六进制数与二进制数之间的转换十分方便。十六进制是计算机中经常使用的一种数制,也可以把它表示成按权展开的多项式。例如:
(2AD.BC)16=2×162+A×161+×D×160+B×16-1+C×16-2
同样,为了区别其他进制数,除了在数的右下角标注16外,还可以在数的后面加一个大写字母H,如2AD.BCH。
三、不同数制之间的转换
1.非十进制数转换成十进制数
非十进制数a1a2…am-1amam+1转换成十进制数采用“位权法”,即把各非十进制数按权展开,然后求和。转换方式用如下公式表示:
【例1.1】将(1001.01)2转换为十进制数。
解:(1001.01)2=1×23+0×22+0×21+1×20+0×2-1+1×2-2=8+0+0+1+0+0.25=9.25
【例1.2】将(38A.11)16转换为十进制数。
解:(38A.11)16=3×162+8×161+10×160+1×16-1+1×16-2
=768+128+10+0.0625+0.0039=906.0664
2.十进制数转换成非十进制数
将十进制数转换成非十进制数时,首先要将十进制数以小数点为界限划分成整数部分和小数部分,然后对两部分采用不同的换算方法。
十进制整数转化为非十进制整数采用“余数法”,即除基数取余数。把十进制整数逐次用任意进制数的基数去除,一直到商是0为止,然后将所得到的余数从右到左排列,首次取得的余数排在最右面。
(1)十进制整数转换为二进制数
一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除,直到商为0,逆序排列余数即可得到,简称除二取余法。
【例1.3】将25转换为二进制数。
所以(25)10=(11001)2
(2)十进制整数转换成十六进制数或八进制
把十进制数转换为十六进制数或八进制数时,将除数2转换成16或8再取余数,并将余数逆序排列就可以了。
【例1.4】将347转换为十六进制数。
所以(347)10=(15B)16
十进制小数转换成非十进制小数采用“进位法”,即乘基数取整数。把十进制小数不断用其他进制的基数去乘,直到小数的当前值等于0或满足所要求的精度为止,最后将所得到的乘积的整数部分正序排列,首次取得的整数排在最左面。
【例1.5】将0.3125转换为二进制数。
所以(0.3125)10=(0.0101)2
3.二进制数与八、十六进制数之间的转换
(1)二进制数转换为八进制数
按“3位并1位”的方法进行。
【例1.6】将(110101010111)2转换为八进制数。
所以(110101010111)2=(6527)8
(2)八进制数转换成二进制数
把每位八进制数用对应的3位二进制数展开表示,即“1位拆3位”。
【例1.7】将八进制数(137)8转换成二进制数。
所以(137)8=(1011111)2
4.十六进制数转换成二进制数
只要将每位十六进制数用对应的4位二进制数替代即可,简称“1位分4位”。
【例1.8】将(4AF8B)16转换为二进制数。
所以(4AF8B)16=(1001010111110001011)2
5.二进制数转换为十六进制数
分别向左,向右每4位一组,依次写出每组4位二进制数所对应的十六进制数,简称“4位合1位”。
【例1.9】将二进制数(111010110)2转换为十六进制数。
所以(111010110)2=(1D6)16
注意:转换时最后一组不足4位时必须加0补齐4位。
常用进制对照表如表1-2所示。
表1-2 常用进制对照表
四、二进制的运算规则
在计算机中,采用二进制数可实现各种算术运算和逻辑运算。
1.算术运算规则
二进制运算与十进制算术运算类似,同样可进行四则运算。
(1)加法运算
0+0=0;0+1=1;1+0=1;1+1=10(逢二进一)。
(2)减法运算
0-0=0;10-1=1(借一当二);1-0=1;1-1=0。
(3)乘法运算
0×0=0;0×1=0;1×0=0;1×1=1。
(4)除法运算
0/1=0;1/1=1(除数为0的无意义)。
【例1.10】求1001101+10010。
【例1.11】求1001101-10001。
2.逻辑运算规则
计算机逻辑关系是一种二值逻辑。二值逻辑用二进制表示非常容易,如“条件成立”与“条件不成立”、“真”与“假”、“是”与“否”等。逻辑代数也称布尔代数,它有三种基本的逻辑关系:与、或、非。其他复杂的逻辑关系都由这三种基本的关系组成。
(1)逻辑“与”
做一件事情取决于多种因素,只有当所有条件都成立时才去做,否则就不去做,这种因果关系称为逻辑“与”,用“∧”表示。
逻辑“与”的基本运算规则:
0∧0=0;0∧1=0;1∧0=0;1∧1=1
【例1.12】设X=10011011,Y=11101011,求X∧Y。
(2)逻辑“或”
做一件事情取决于多种因素,只要其中有一个因素得到满足就去做,这种因果关系称为逻辑“或”,用“∨”表示。
逻辑“或”的基本运算规则:
0∨0=0;0∨1=1;1∨0=1;1∨1=1。
【例1.13】设X=10001010,Y=11101011,求X∨Y。
(3)逻辑“非”,用“ ̄”或用“┐”,表示。
逻辑“非”实现逻辑否定,即“求反”运算,“真”变“假”,“假”变“真”。
逻辑“非”的运算规则:
┐1=0;┐0=1。
【例1.14】设X=10011011,求┐X。
解: ┐X=01100100
(4)逻辑“异或”
在逻辑代数中除了三种基本的逻辑运算以外,还有一种常用的逻辑运算,这种逻辑运算是逻辑“异或”,用“⊕”表示。
逻辑“异或”的基本运算规则:
0⊕0=0;0⊕1=1;1⊕0=1;1⊕1=0。
逻辑“异或”运算即实现按位加的功能,只有当两个逻辑值相同时为0,反之为1。
【例1.15】设X=11011010,Y=11101111,求X⊕Y。
五、信息编码
计算机中的所有数据、指令以及一些符号等都是用特定的二进制代码表示的。数字化信息编码是把少量二进制符号(代码)按照一定规则组合起来,以表示大量复杂多样的信息的一种编码。一般来说,根据描述信息的不同可分为数字编码、字符编码、BCD码和汉字编码。
1.数字编码
在计算机内用二进制形式表示的数称为机器数,该数称为这个机器数的真值。机器数有固定的位数,具体是多少位受到所用计算机的限制。机器数把其真值的符号数字化,通常是用规定的符号位(一般是最高位)取0或1来分别表示其值的正或负。例如,假设机器数为8位,则其最高位是符号位,那么在整数表示的情况下,对于00101110和10010011,其真值分别为十进制数+46和-19。机器数常采用原码和补码的形式作为其编码方式。
(1)原码
整数X的原码是指:其符号位的0或1表示X的正或负,其数值部分就是X的绝对值的二进制表示。通常用[X]原表示X的原码。
例如,假设机器数的位数是8,那么[+17]原=00010001,[-39]原=10100111。
因为[+0]原=00000000,[-0]原=10000000,所以数0的原码不唯一,有“正零”和“负零”之分。
(2)反码
在反码的表示中,正数的表示方法与原码相同;负数的反码是把其原码除符号位以外的各位取反(即0变1,1变0)。通常,用[X]反表示X的反码。
例如,[+45]反=[+45]原=00101101,[-32]原=10100000,[-32]反=11011111。
(3)补码
在补码的表示中,正数的表示方法与原码相同;负数的补码是在其反码的最低有效位上加1。通常用[X]补表示X的补码。
例如,[+14]补=10100100,[-36]反=11011011,[-36]补=11011100,数0的补码的表示是唯一的,即[0]补=[+0]补=[-0]补=00000000。
2.字符编码
计算机除了能处理数值外,还能处理字符(指字母A、B、…、Z、a、b、…、z,数字0、1、…、9,其他一些可打印显示的符号如:+、-、*、/、<、>、…)。在计算机内部,这些符号也用二进制代码来表示,目前,在国际上广泛采用的是美国标准信息交换码(American Standard Code for Information Interchange,ASCII)。
标准的ASCII码中共有128个字符,所以标准的ASCII码采用7位二进制编码。因为其中的字符排列是有序的,其对应的ASCII码也是相连的,所以只需要记几个关键字符的ASCII码,其他可以推算。
'0'——48 'A'——65 'a'——97
标准的ASCII码能表示的字符较少,于是在其基础上又设计了一种扩充的ASCII码,采用的是8位二进制编码,可以表示256个字符,如表1-3所示。
表1-3 扩充的ASCII码表
ASCII码部分编码解释如表1-4所示。
表1-4 ASCII码部分编码解释
续表
3.BCD码
十进制数在键盘输入和打印、显示输出时往往是用ASCII码表示的,但是在计算机内运算时,是以二进制形式进行的。为了便于转换,设计了一些用二进制编码表示的十进制数,称为二-十进制码,即BCD码。
BCD码是用4位二进制代码来表示一位十进制数。有多种BCD码:8421码、2421码、余3码、格雷码,如表1-5所示。
表1-5 BCD码
BCD码表示的数形式上像二进制数,但不是真正的二进制数。
4.汉字编码
要在计算机上处理汉字信息,必须解决汉字的输入、存储、输出和编码转换等问题。计算机处理汉字的基本过程是:用户用键盘输入汉字的编码(外码),通过代码转换程序转换成汉字内码进行存储、处理、加工,由外码转换到内码时,要利用输入的外码到码表中去检索机内码。输出时,再利用字形检索程序在汉字模库中查到表示这个汉字的字形码,根据字形码在显示器或打印机上输出。汉字处理过程如图1-6所示。
图1-6 汉字处理过程
(1)国标码国标GB 2312—1980规定,全部国标汉字及符号组成94×94的矩阵,在这矩阵中每一行称为一个“区”,每一列称为一个“位”。这样就组成了94个区(01~94区),每个区内有94个位(01~94)的汉字字符集。区码和位码简单地组合在一起(即两位区码居高位,两位位码居低位)就形成了“区位码”。区位码可唯一确定某一个汉字或汉字符号,反之,一个汉字或汉字符号都对应唯一的区位码。如汉字“玻”的区位码为“1803”,即在18区的第3位。
所有汉字及符号的94个区划分成四个组:1~15区为图形符号区。其中1~9区为标准区;10~15区为自定义符号区;16~55区为一级常用汉字区,共有3755个汉字,该区的汉字按拼音排序;56~87区为二级非常用汉字区,共有3008个汉字,该区的汉字按部首排序;88~94区为用户自定义汉字区。
(2)内码
汉字的内码是从上述区位码的基础上演变而来的。它是在计算机内部进行存储、传输所使用的汉字代码。区码和位码的范围都在01~94内,如果直接用它作为内码就会与基本ASCII码发生冲突。因此,汉字的内码采用如下的运算规定。
高位内码:区码+20H+80H;低位内码:位码+20H+80H。
在上述运算规则中加20H应理解为基本ASCII的控制码,加80H意在把最高二进制位置1,以与基本ASCII码相区别。或者说是识别是否汉字的标志位。例如,将汉字“玻”的区位码转换成机内码。
高位内码=(18)10+(20)16+(80)16=(00010010)2+(00100000)2+(10000000)2
=(10110010)2=(B2)16=B2H
低位内码=(3)10+(20)16+(80)16=(00000011)2+(00100000)2+(10000000)2=(10100011)2
=(A3)16=A3H
内码=区码+20H+80H+位码+20H+80H=(1011001010100011)2=B2A3H
(3)外码
外码也称汉字输入码。汉字输入的方法有键盘、手写、语音、扫描等多种,但键盘输入仍是当前主要的汉字输入方法。计算机标准键盘只有几十个键,而汉字至少有数千个,因此用键盘输入汉字,需要对汉字进行编码。不同的输入法有着自己不同的编码方案,如区位码、五笔字型码、拼音码、自然码等,这些都是外码,外码必须通过相应输入法的代码转换程序,才能转换成机内码存放在计算机存储器中。目前,人们根据汉字的特点提出了数百种汉字输入码的编码方案,不同的用户可根据自己的特点和需要选用输入方法。
(4)字形码
字形码是指汉字信息的输出编码,因此,对每一个汉字,都要有对应的字的模型,也称字模,存储在计算机内,字模的集合就构成了字模库,也称字库。汉字输出时,需要先根据内码找到字库中对应的字模,再根据字模在输出设备输出汉字。
记录汉字字形有多种方法,常用的有点阵法和矢量法,分别对应两种字形的编码:点阵码和矢量码。
①点阵码是一种用点阵表示汉字字形的编码,它把汉字按字形排列成点阵,常用的有16×16点阵、24×24点阵、32×32点阵或更高。16×16点阵方式是最基础的汉字点阵,一个1×16点阵的汉字要占用16×16÷8=32字节,24×24点阵的汉字要占用72字节……。可见汉字字形点阵的信息量很大,占用的存储空间也非常大。点阵规模越大,每个汉字的存储字节数就越多,字库也就越大;但字形分辨率越好,字形也越美观。
②矢量码使用一组数学矢量来记录汉字的外形轮廓,矢量码记录的字体称为矢量字体或轮廓字体。这种字体能很容易地放大缩小,且不会出现锯齿边缘,屏幕上看到的字形和打印输出的效果完全一致。
六、计算机中数据的单位
计算机中数据的常用单位有位、字节和字节。
1.位(bit)
位又称比特,是计算机表示信息的数据编码中的最小数据单位,即1位二进制数,1位二进制的数码用0或1来表示。
2.字节(byte,B)
字节是计算机存储信息的最基本单位。1个字节用8位二进制数表示,通常计算机以字节为单位来计算存储容量。例如,计算机内存容量和磁盘的存储容量等都是以字节为单位表示的。
存储空间容量的单位除了用字节表示以外,还可以用千字节(KB)、兆字节(MB)、吉字节(GB)和太字节(TB)等表示。它们之间的换算单位关系如下:
1KB=1024B 1MB=1024KB
1GB=1024MB 1TB=1024GB
3.字(word)
字又称字长,是指计算机进行一次整数运算所能处理的二进制数据的位数,由若干个字节组成(一般字节数的整数倍),如16位、32位和64位等。它是计算机进行数据处理和运算的单位,不同档次的计算机有不同的字长,字长越大,性能越好。字长是衡量计算机一个重要的性能指标。