1.2.3 计算机中数制和信息的表示
1.计算机中的数据
计算机中的数据分为数值型数据和非数值型数据。比如,0,1,2,3…等十个数字组成的数据可称为数值型数据;由字符和各种符号组成的数据(包括图形、图像、声音等)称为非数值型数据。计算机的功能就是对这些信息(数据)进行加工处理。
(1)数据的单位
位(bit):简写为b(比特),是计算机存储数据的最小单位,是二进制数中的一个位。
字节(byte):简写为B,规定一个字节为8位,即1B=8bit。字节是计算机数据处理的基本单位,每个字节由8个二进制位组成。一般一个字节可存放一个ASCII码,两个字节存放一个汉字。
字(Word):字是计算机进行数据处理时,一次可以存取、加工和传送的位数最长的数据。一个字通常由一个或若干个字节组成。由于字长是决定计算机数据处理的速度和精度,因此,字长越长说明计算机的性能越好。
计算机存储容量以字节数来度量,各度量单位可用字节表示:
1KB=210B=1024B
1MB=210KB=1024×1024B
1GB=210MB=1024×1024KB=1024×1024×1024B
(2)计算机中数的表示
在计算机中,所有的数据、指令以及一些符号等都是用特定的二进制代码表示。通常,把一个数在计算机内二进制的表示形式称为机器数,该数称为这个机器数的真值。机器数具有下列特点:
① 由于计算机设备的限制和为了操作上的便利,机器数有固定的位数。它所表示的数受到固定位数的限制,具有一定的范围,超过这个范围就会产生“溢出”。
例如,一个8位机器数,所能表示无符号整数的最大值是8位全“1”:11111111,即十进制数255。如果超过这个值,就会产生“溢出”。
② 机器数把其真值的符号数字化。通常是用机器数中规定的符号位(一般是最高位)取0或1,来分别表示其真值的正或负。
例如,一个8 位机器数,其最高位是符号位,那么在定点整数原码表示情况下,对于00101110和10010011,其真值分别为十进制数+46和-19。
2.二进制数原理与数制转换
(1)二进制数原理
各种数据在计算机内都用二进制编码形式表示。原因是其可靠性(只有两个状态,数字传输和处理不易出错)、简易性(求和与求积法则都各有三个)、可行性(符号逻辑电路只有两种状态)和逻辑性(符合代数中的“真”和“假”)。
二进制编码是进位计数的数字系统的一种。如果使用r个基本符号(即0,1,2,…,r-1)表示数值,则称其为基r的数制,r称为该数制的“基(radix)”。
二进制数只有两个不同的数字:0和1,并且是“逢二进一”。
二进制数的基数是2,各数位的权也是基数的整数次幂。对于二进制数,其整数部分各数位的权,从最低位开始依次是20,21,22,23,…;其小数部分各数位的权,从最高位开始依次是2-1,2-2,2-3,…。
为了表示一个二进制数,通常可在它的右端加上字母“B”(Binary),例如:101B,-10.11B等。
与十进制数相仿,一个二进制数可表示成按权展开的多项式。例如:
101B=1×22+0×21+1×20
10.11B=1×21+0×20+1×2-1+1×2-2
注意:二进制数101B读为“一零一”或“幺零幺”,不能读作“一百零一”。
(2)数制转换
① 二进制数与十进制数相互转化。
• 二进制数转换成十进制数,只需将二进制数按权展开求和,即“乘权求和”。
例1:1101.01B=1×23+1×22+0×21+1×20+0×2-1+1×2-2
=8+4+0+0.25
=13.25
• 十进制整数转换成二进制数(除二取余)。
例2:把37转换成二进制数,解题过程可写成如下格式:
这里,我们把37除以2的商18写在37的左面,余数1写在37的下面,然后对所得的商18,继续用2来除,直至商为0。所以37=100101B
• 十进制小数转换成二进制数(乘2取整),即先用2乘该十进制纯小数,然后去掉乘积中的整数部分;再用2 乘剩下的小数部分,然后再去掉乘积中的整数部分;如此下去,直到乘积为0,或者达到所要求的精度为止。把乘积的整数部分依次排列起来,就是所要求的二进制小数。
例3:把0.6875转换成二进制数的解题过程是:
于是可得0.6875=0.1011B。
这里,我们把0.6875乘以2的积1.3750写在0.6875的下面,留下乘积的整数部分1,把乘积的小数部分0.3750写在0.6875的右面,然后对0.3750继续用2来乘,直至乘积为0。于是可得0.6875=0.1011B。
当一个十进制数既有整数部分又有小数部分,则可将整数部分和小数部分分别进行转换,然后再把两部分结果合并起来。
② 二进制数与十六进制数相互转化
由于二进制数存在书写过于冗长容易出错的缺点,且十六进制数与二进制数之间存在极为简便的转换方法,所以,在有关的计算机理论的叙述中我们一般采用十六进制来表示数据的方法。
十六进制数的基数是16;规则是“逢十六进一”;数字符号为0,1,2,…A,B,C,D,E,F,其中A,B,C,D,E,F依次与十进制的10,11,12,13,14,15相对应。
• 二进制数转化为十六进制数
二进制转化为十六进制采取的方法是“四位并一位”,从二进制数小数点起,整数部分从右向左数,每四位二进制数合并成一位十六进制数;小数部分从左向右数,也是每四位二进制数合并成一位十六进制数。
例4:111011001.110B=0001,1101,1001.1100B=1D9.CH
• 十六进制数转化为二进制数
十六进制转化为二进制采取的方法是“一位拆四位”,每一位十六进制数字可以拆成四位二进制数。
例5:7E.8CH=01111110.10001100B
3.西文字符在计算机中的表示
人们通常接触和处理的信息中,相当一部分是用字符或字符组合来表示的,如字母、数字以及其他一些可打印显示的字符。同时,计算机和外部设备之间进行通讯联系时,还需要一些控制符,如空格符(SP)、回车符(CR)等等。通常把这些控制符看作特殊的字符。由于控制符不能直接书写或显示,一般用英文缩写或公认的记号表示。
在计算机内部,上述字符必须用一种二进制代码来表示。目前,在微机系统中,广泛采用的是美国标准信息交换代码(American Standard Code for Information Interchange),简称ASCII码。
ASCII码是用1个字节表示。取1个字节中的7位二进制编码(0000000B-1111111B),它可以表示128个字符。(参见附表1)
4.汉字在计算机中的表示
汉字是像形文字,用计算机对汉字信息处理要比西文复杂得多,必须解决汉字的输入(输入码)、输出(字形码)和计算机内部的编码(机内码)问题。汉字数量多,因此一个汉字要用2个字节表示。
(1)输入码:汉字输入码应具有单一性、方便性和可靠性。目前,有多种汉字输入编码,主要类型有:①数字编码,是用一定位数的数字作为汉字的输入编码,如区位码、电报码等;②字音编码,是依据汉字读音的一种编码,最常用的就是拼音码;③字形编码,是根据汉字字形的一种编码,如五笔字型码、表形码等;④音形编码,是根据汉字的字音和字形相结合的特征进行编码。
(2)字形码:为了显示或打印出汉字,必须提供汉字的字形码。一般可用点阵或矢量形式表示。系统提供的所有汉字字形码的集合组成了系统的汉字字形库,简称汉字库。
(3)机内码:即汉字内码,是在计算机内对汉字进行传输、存储和处理的代码。目前我国普遍使用的汉字内码主要是国标内码和扩充国标内码。
① 国标内码:简称GB内码,是建立在汉字国标码基础上的一种汉字内码。
② 扩充国标内码:为了更进一步与国际标准一致,我国又提出了“扩充汉字内码规范”(GBK),这就是扩充国标内码,简称GBK内码,它兼容了GB内码。
注意:同一个汉字在不同汉字输入方法下,其输入码一般是不相同的,但是在计算机中都转换为相同的内码。
除了上面提到国标内码外,还有很多其他形式的机内码,如台湾地区广泛使用的汉字内码是“大五码”(BIG-5),这种内码完全不同于GB内码。不同的汉字内码不能直接交流,必须经过专门的内码转换软件转换才行。