|
在计算机中,数字是以一串"0"或"1"的二进制代码来表示的,这是计算机唯一能识别的数据形式。数据必须转化成二进制代码来表示,也就是说,所有需要计算机加以处理的数字、字母、文字、图形、图像、声音等信息(人识数据)都必须采用二进制编码(机识数据)来表示和处理。
|
|
|
|
按进位的方法进行计数,称为进位计数制。在采用进位计数制的数字系统中,如果只用r个基本符号来表示数值,则称其为r进制。每个数都可以用基数、系数和位数的形式来表示,即
|
|
|
N=mn-1Kn-1+mn-2Kn-2+…+m0K0+m-1K-1+m-2K-2+…
|
|
|
.基数(K):是最大进位数(进制数),数制的规则是逢K进1。例如,十进制基数为10,六十进制(时间)的基数为60等。
|
|
|
.系数(m):每个数位上的值,取值范围为0~K-1。例如,234中百位系数为2,十位系数为3,个位系数为4。
|
|
|
.位数(n):各种进制数的个数。例如,十进制数234的位数为3,二进制数11010011的位数为8。
|
|
|
例如:(234)10=2×102+3×101+4×l00(式中:m2=2,m1=3,m0=4;K=10;n=3)。
|
|
|
显然,一个任意进制的数都可以按上述方法表示为其他进制的数。下表列出了计算机中常用的几种数制的对应关系。
|
|
|
|
|
|
|
|
|
an…a1a0·a-1…a-m(r)=a*rn+…+a*rl+a*r0+a*r-1+…+a*r-m
|
|
|
|
10101(B)=1×24+1×22+1×20=21
|
|
|
101.11(B)=1×22+1×20+1×2-1+l×2-2=5.75
|
|
|
|
|
101A(H)=1×l63+1×l61+10×l60=4122
|
|
|
|
|
.整数部分:除以r取余数,直到商为0,余数从右到左排列。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(1)加法:1+0=1; 0+1=1; 0+0=0; 1+1=0(有进位)。
|
|
|
(2)减法:1-0=1; 1-1=0; 0-0=0; 0-1=1(有借位)。
|
|
|
(3)乘法:0×0=0; 1×0=0; 0×1=0; 1×1=1。
|
|
|
|
|
各种数据在计算机中的表示形式称为机器数,其特点是采用二进制计数制,数的符号用0、1来表示,小数点则隐含表示而不占位置。真值是机器数所代表的实际数值。
|
|
|
机器数分无符号数和带符号数两种。无符号数表示正数,没有符号位。对于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点位置在最高位之前,则是纯小数。对于带符号数,最高位是符号位,其余位表示数值,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在最高数值位之前(符号位之后),则是纯小数。
|
|
|
为方便运算,带符号的机器数可采用原码、反码和补码等不同的编码方法,这些编码方法称为码制。真值的符号数字化:我们用"+"和"-"来表示正负数,而计算机则将二进制数的最高位设置成符号位,通常用"0"表示正数,"1"表示负数。
|
|
|
|
规则:最高位为符号位,"0"表示正数,"1"表示负数。对数0则有"+0"和"-0"两种表示。
|
|
|
|
对n+1位字长用以表示整型数值的范围:-2n+l≤X≤2n-l。
|
|
|
|
规则:最高位为符号位,"0"表示正数,"1"表示负数。正数与原码相同,负数则要将除符号位的其他位按位取反。对数0则有"+0"和"-0"两种表示。
|
|
|
|
对n+1位字长用以表示整型数值的范围:-2n+l≤X≤2n-l。
|
|
|
|
规则:最高位为符号位,"0"表示正数,"1"表示负数。正数与原码相同,负数则要将除符号位的其他位按位取反后加1。对数0只有"0"一种表示。
|
|
|
|
对n+1位字长用以表示整型数值的范围:-2n≤X≤2n-1。
|
|
|
补码运算的优点:将减法运算变成加法运算(因为运算器中只有加法器)。
|
|
|
|
最高位的进位 则自然丢失
|
|
|
|
规则:最高位为符号位,"1"表示正数,"0"表示负数。
|
|
|
|
|
特点:保持了数据原有的大小顺序,便于进行比较操作。
|
|
|
以上介绍的4种编码方法(设字长为4位,最高位为符号位)的对应关系如下表所示。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
例如,(-0.25)10→(-0.01)2,以原码定义表示为10100000。
|
|
|
|
|
.(有)符号数:小数点在符号位最末有效位之后,其表示格式如下。
|
|
|
|
|
|
|
|
例如,(-10)10→(-1010)2,以原码定义表示为10001010。
|
|
|
.无符号数:不设符号位,小数点在符号位最末有效位之后,其表示格式如下。
|
|
|
|
设字长为n+1位,无符号数的数值表示范围为0≤N≤2n+1-1。
|
|
|
例如,(255)10→(11111111)2,以原码定义表示为11111111。
|
|
|
|
|
|
|
.规格化:为了在尾数中表示最多的有效数据位,也为了数据表示的唯一性而定义的规则。如将尾数的绝对值限制在区间[0.5, 1]中,当尾数(M)用补码表示时,有以下两种情况。
|
|
|
|
|
.浮点数的表示范围:尾数的位数决定数的精度,阶码的位数决定数的范围。而表示范围与机器的具体的表示方法及字长有关,下面举例说明。
|
|
|
例:以R为基数,有p位阶码和m位二进制尾数代码的浮点数,阶码采用二进制正整数编码表示,求数值的表示范围。
|
|
|
|
|
|
|
|
|
注:本例中没有符号位,也没有考虑阶码为负的情况。如果考虑这些因素就要考虑阶码和尾数的编码方式。
|
|
|
.浮点数的溢出:当运算的结果超出该机器浮点数可表示的范围时,则产生浮点数溢出,浮点数可表示的范围如下图所示。比如上例中,当浮点数的运算结果小于1/R(或大于R2p-1(1-2-m))时,则产生正下溢(或正上溢)。
|
|
|
|
|
|
|
则数110.011(B)=+0.110011×2+11(规格化尾数)=0 110011×2011(机器数格式)可表示为:
|
|
|
|
|
|
|
其中,1位数符(S):正数为0,负数为1;除去了最高位的尾数(f)为原码表示;阶码(E)为特殊移码表示。
|
|
|
|
|
|
例:将IEEE 754标准的精度浮点数0 10000110 01100000001000000000000转换为真值。
|
|
|
解:将特殊移码表示阶码转换为真值阶码,因为E=10000110-01111111=00000111,所以E=7;因为f=01100000001000000000000,所以1.f=1.01100000001;将1.f右移7位(因为E=7)=(10110000.0001)2=176.0625。
|
|
|
|
数值、文字和英文字母等字符在进入计算机时,都必须转换成二进制表示形式,称为字符编码。
|
|
|
用4位二进制代码表示1位十进制数,称为十进制编码,简称BCD编码。常用的十进制数的编码有8421 BCD码、余3码、格雷码。
|
|
|
|
|
|
|
ASCII码(American Standard Code for Information Interchange)是美国标准信息交换码的简称,该编码已成为国际通用的信息交换标准代码。
|
|
|
ASCII码采用7个二进制位对字符进行编码,其格式为每1个字符有1个编码。每个字符占用1个字节,用低7位编码,最高位为0。其共有128个编码,编码从0~127,如下表所示,其中H表示高3位,L表示低4位。
|
|
|
|
|
|
|
汉字处理包括汉字的编码输入、汉字的存储和汉字的输出等环节。在汉字处理的各阶段,分为输入码、(机)内码、交换码(国标码)和字形码,各种码对应的处理过程如下所示:
|
|
|
|
|
数字编码:用数字串代表一个汉字的输入。国标区位码等便是这种编码法。
|
|
|
拼音编码:是以汉语拼音为基础的输入方法。由于汉字同音字太多,输入重码率很高,因此,按拼音输入后还必须进行同音字选择,影响了输入速度。全拼、双拼、微软拼音等便是这种编码法。
|
|
|
字形编码:是以汉字的形状确定的编码。汉字总数虽多,但都是由一笔一画组成,全部汉字的部件和笔画是有限的。因此,把汉字的笔画部件用字母或数字进行编码,按笔画书写的顺序依次输入,就能表示一个汉字,五笔字型、表形码等便是这种编码法,这种方法的缺点是需要记忆很多的编码。
|
|
|
|
汉字内部码(简称内码)是汉字在信息处理系统内部存储、处理、传输汉字用的代码。国家标准局GB2312—1980规定的汉字国标码中,每个汉字内码占两个字节,每个字节最高位置"1",作为汉字机内码的标示。以汉字"大"为例,国标码为3473H,两个字节的最高位为"1",得到的机内码为B4F3H。又例如:
|
|
|
|
|
汉字字形码是表示汉字字形的字模数据,通常用点阵、矢量函数等方式表示。字形码也称字模码,它是汉字的输出形式,随着汉字字形点阵和格式的不同,汉字字形码也不同。常用的字形点阵有16×16点阵、24×24点阵、48×48点阵等。
|
|
|
字模点阵的信息量是很大的,占用存储空间也很大,以16×16点阵为例,每个汉字占用32(16×16/8=32)个字节,两级汉字大约占用256KB。因此,字模点阵只能用来构成"字库",而不能用于机内存储。字库中存储了每个汉字的点阵代码,当显示输出时才检索字库,输出字模点阵得到字形。
|
|
|
汉字的矢量表示法是将汉字看作是由笔画组成的图形,提取每个笔画的坐标值,这些坐标值就可以确定每个笔画的位置,所有坐标值组合起来就是该汉字字形的矢量信息。每个汉字矢量信息所占的内存大小不一样。
|
|
|