1、第2章 数据的机器层次表示,数据是计算机加工和处理的对象,不同的数据表示形式需不同的电路实现处理,所以数据的机器层次表示将直接影响到计算机的结构和性能。,作业:1,2,5,8,11,16,18(1,3), 23,24,本章学习要求,了解:无符号数与带符号数,真值和机器数等概念 掌握:原码、补码、反码表示法以及三种码制与真值之间的转换方法 掌握:定点数和浮点数的表示范围 理解:浮点数阶码的移码 了解:IEEE754浮点数标准 掌握:常见的字符编码方法(ASCII码)、汉字国标码、区位码、机内码 掌握:8241码、2421码和余3码 掌握:奇偶校验位及其形成方法 了解:海明校验码和循环冗余校验码,
2、2.1 数值数据的表示,在计算机中,采用数字化方式来表示数据,数据有无符号数和带符号数之分,其中带符号数根据其编码的不同又有原码、补码和反码3种形式。,2.1.1 计算机中的数值数据,进位计数制:用少量的数字符号(也称数码),按先后次序把它们排成数位,由低到高进行计数,计满进位,这样的方法称为进位计数制。 基数:进位制的基本特征数,即所用到的数字符号个数。 例如10进制 :0-9 十个数码表示,基数为10 权:进位制中各位“1”所表示的值为该位的权。 常见的进位制:2,8,10,16进制。,基数:10 符号: 0,1,2,3,4,5,6,7,8,9 计算规律: “逢十进一”或“借一当十”并列表
3、示法:N10=dn-1dn-2 d1d0d-1d-2 d-m 十进制数的多项式表示: N10=dn-1 10n-1 + dn-2 10n-2 + d1 101 + d0 100 + d-1 10-1 + d-2 10-2 + d-m 10-m m,n为正整数,其中n为整数位数;m为小数位数。di表示第i位的系数,10i称为该位的权,10为基值.,十进制(Decimal),例如: 一个十进制数123.45的表示,123.45 =1102+ 2101+ 3 100 + 410-1+ 510-2 注:等式左边为并列表示法,等式右边为多项式表示法,二进制(Binary),基数: 2 符号: 0,1 计
4、算规律:逢二进一或借一当二 二进制的多项式表示: N2=dn-1 2n-1 + dn-2 2n-2 + d1 21 + d0 20 + d-1 2-1 + d-2 2-2 + d-m 2-m 其中n为整数位数;m为小数位数。 di表示第i位的系数,2i称为该位的权,2为基值.,十六进制(Hexadecimal),基数: 16 符号: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 计算规律:逢十六进一或借一当十六 十六进制的多项式表示: N16=dn-1 16n-1 + dn-2 16n-2 + d1 161 + d0 160 + d-1 16-1 + d-2 16-2 + d
5、-m 16-m 其中n为整数位数;m为小数位数。 di表示第i位的系数,16i称为该位的权.,例如十六进制数 (2C7.1F)16的表示 (2C7.1F)16=2 162+ 12 161+ 7 160+ 1 16-1+ 15 16-2,进位计数制之间的转换,R进制转换成十进制的方法十进制转换成二进制方法二进制和八进制之间的转换二进制和十六进制之间的转换,.R进制转换成十进制的方法,按权展开法: 先写成多项式,然后计算十进制结果.N= dn-1dn-2 d1d0d-1d-2 d-m=dn-1 Rn-1 + dn-2 Rn-2 + d1R1 +d0 R0 + d-1 R-1 + d-2 R-2 +
6、 d-m R-m,例,例如: 写出(1101.01)2,(237)8,(10D)16的十进制数(1101.01)2=123+122+021+120+ 02-1+12-2 =8+4+1+0.25=13.25(237)8=282+381+780 =128+24+7=159(10D)16=1162+13160=256+13=269,十进制转换成二进制方法,一般分为两个步骤: 整数部分的转换 除2取余法(基数除法) 减权定位法 小数部分的转换 乘2取整法(基数乘法),除基取余法,除基取余法:把给定的数除以基数,取余数作为最低位的系数,然后继续将商部分除以基数,余数作为次低位系数,重复操作,直至商为0。
7、 例如:用基数除法将(327)10转换成二进制数,2 163 1,2 81 1,2 40 1,2 20 0,2 10 0,2 5 0,2 2 1,2 1 0,2 0 1,(327)10 =(101000111) 2,2 327 余数,减权定位法,将十进制数依次从二进制的最高位权值进行比较,若够减则对应位置1,减去该权值后再往下比较,若不够减则对应位为0,重复操作直至差数为0。 例如:将 (327)10 转换成二进制数 256327512327-256=71 171128 071-64 =7 1732 0716 078 07-4 =3 1 3-2=1 11-1=0 1,乘基取整法,例如:将(0.
8、8125) 10 转换成二进制小数.整数部分2 0.8125=1.625 12 0.625=1.25 12 0.25=0.5 02 0.5=1 1(0.8125) 10 =(0.1101) 2,乘基取整法(小数部分的转换):把给定的十进制小数乘以2,取其整数作为二进制小数的第一位,然后取小数部分继续乘以2,将所的整数部分作为第二位小数,重复操作,直至得到所需要的二进制小数。,二进制与八进制、十六进制之间的转换,二 八 二 十六 000 0 0000 0 1000 8 001 1 0001 1 1001 9 010 2 0010 2 1010 A 011 3 0011 3 1011 B 100
9、4 0100 4 1100 C 101 5 0101 5 1101 D 110 6 0110 6 1110 E 111 7 0111 7 1111 F,二进制转换成八进制,例:(10110111 .01101) 2,(10110111.01101) 2 =(267.32)8,八进制: 2 6 7 . 3 2,二进制: 010 ,110 , 111 . 011 , 010,二进制: 10 ,110 , 111 . 011 , 01,低位补零,凑足三位,高位补零,凑足三位,八进制转换二进制,方法:直接将一位八进制数用三位二进制数表示即可。例如: (123.46 ) 8=(001,010,011 .
10、100,110 ) 2 =(1010011.10011)2,二进制转换成十六进制,例:(110110111 .01101) 2转换成16进制。,(10110111.01101) 2 =(1B7.68)16,十六进制: 1 B 7 . 6 8,二进制: 0001 ,1011 , 0111 . 0110 ,1000,二进制: 1 ,1011 , 0111 . 0110 ,1,低位补零,凑足四位,高位补零,凑足四位,十六进制转换成二进制,方法:一位十六进制数用四位二进制数表示。例如: (7AC.DE ) 16=(0111,1010,1100.1101,1110 ) 2 =(11110101100 .
11、1101111 )2,2.1.2 无符号数vs.有符号数,无符号数:不带符号位的数 在数据处理的过程中,如不需要设置符号位可用全部字长来表示数值大小。 如8位无符号数的取值范围是0255(28-)。 可用于计数、地址指针等 有符号数:带符号位的数 机器字长:(通用)寄存器位数 16位寄存器 无符号数:065535 一位符号位的有符号数:3276832767(补码),带符号数的编码,真值vs.机器数 真值:正、负号加某进制数绝对值的形式称为真值。 如二进制真值: X=+1011 y=-1011 机器数:符号数码化的数称为机器数如 :X=01011 Y=11011,机器数的表示方法,一旦符号数字化
12、以后,符号和数值就形成了一种新的编码。在运算过程中,符号位能否和数值部分一起参加运算?如果参与运算,符号位又需要做哪些处理?这些问题都与符号位和数值位所构成的编码有关。机器数有四种表示方法即原码、补码、反码和移码。,2.1.3 原码表示法,原码表示法用“0”表示正号,用“1”表示负号,数值位用真值的绝对值表示。 整数的符号位与数值位之间用逗号“,”隔开; 小数的符号位与数值位之间用小数点“.”隔开。 约定: 在本章中,n表示字长的有效位(数值位),X表示真值。,例:完成下列数的真值到原码的转换 X1 = + 1011011 X2 = - 1011011,X1 原 =0,1011011,X2 原
13、 =1,1011011,整数原码的定义,整数原码的定义,0的原码有两种表示方式: +0原 =0,0000000; -0原 =1,0000000 原码整数的表示范围: 最大值 : 2n-1 最小值:-(2n-1) 表示数的个数: 2n+1 - 1,X 1X0 X原 = 1-X 0X-1,例:完成下列数的真值到原码的转换 X1 = + 0.1011011 X2 = - 0.1011011 0的原码有两种表示方式:+0原 =0.0000000; -0原 =1-0.0000000=1.0000000,X1原=0.1011011,X2原=1.1011011,小数原码的定义,最大值 : 1-2-n 最小值
14、:-(1-2-n) 表示数的个数: 2n+1 - 1,若二进制原码小数的位数分别是8、16位,求其该数表示的最大值、最小值及所能表示数的个数?,8位: 127/128,-127/128,255 16位: 32767/32768 , -32767/32768 , 65535,原码小数的表示范围,注意:最高位为符号位,有效数值位分别为7、15。,X 1X0 X原 = 1-X 0X-1,原码特点,表示简单,易于同真值之间进行转换,实现乘除运算规则简单。进行加减运算十分麻烦,本来是加法运算却可能要用减法器实现。 当两个操作数符号不同且做加法运算时,先要判断两个数绝对值的大小,然后将绝对值大的数减去绝对
15、值小的数,结果的符号以绝对值大的数为准。0的表示不惟一,2.1.4 补码表示法,以钟表对时为例说明补码的概念 假设现在的标准时间是3点整,而有一只表已经6点了,为了校准时间,可以采用两种方法: (1)逆时针:将时钟退3格 (2)顺时针:将时钟向前拨9格这两种方法都能对准到3点。由此可以看出,减3和加9是等价的。就是说9是(3)对12的补码,可以用数学公式表示为:-3=+9 (mod 12) (“”为取模相等)这里12是模数。 上例中63和69之所以等价,是因为表指针超过12时,将12自动丢掉,最后得到(6+9)-123。 启示:负数用补码表示时,可以把减法转化为加法。,同余:是指两整数A、B
16、除以同一正整数M,所 得余数相同,A=B (mod M),补码的概念,模:计量器具的容量,或称为模数。n+1位字长整数的模值为2n+1 4位字长的机器表示的二进制整数为:00001111 共16种状态,模为16=24 。 一位符号位的纯小数的模值为2 补码的定义:正数的补码就是正数的本身,负数的补码是原负数加上模。,例:完成下列数的真值到补码的转换X1 = + 1011011 X2 = - 1011011,X1补=0,1011011,X2补=27+1+x=1,0100101,整数补码的定义,X 1X0 x补=2+X 0X-1 (mod 2),例:完成下列数的真值到补码的转换X1 = + 0.1
17、011011 X2 = - 0.1011011,X1补=0.1011011,X2补=1.0100101,小数补码的定义,例:0的补码 (补码中“零”只有一种表示形式)+ 0.0000000=0.0000000-0.0000000=2+(-0.0000000) (mod 2) =0.000000,-1的补码,不妨设补码的有效数值位为n 根据定义,对于整数补码有:-1补2n+1-1=1,11111.1 (包括符号位一共n1个1) 根据定义,对于小数补码有:-1补2+(-1.00)=1.0.0 (n个0)由此可见, “-1”既可以在整数范围内表示,也能在小数范围内表示,在计算机中有两种不同的补码表示
18、。再看负数-2n的补码表示 -2n补2n+12n2n-11,0.0(n个0)因此,“-1”的补码小数表示与“-2n”的补码表示结构相同,都是:符号位为1,数值部分为n个0。 “-1”与“-2n”分别是补码小数和补码整数中可以表示的最小负数。,补码的表示范围:,n位有效数值位,不包括符号位n位整数: 2n -1 -2n n位小数: 1- 2-n - 1 均能表示 2n 个数,原码与补码之间的转换,正数的原码和补码显然一致。对于负数:设n=4, x = x1x2x3x4 x补=2n+1+x=10,0000-x1x2x3x4 =11111+00001 -x1x2x3x4 符号位除外,对原码每位取反,
19、末位加1。 对小数原码也同样成立。反过来,由补码求原码也同样成立。,原码求补码 先看整数原码和补码之间的转换,原码与补码之间的转换,原码-补码 正数 X补=X原 负数 符号位除外,每位取反,末位加1例:X= -1001001 X原=1,1001001, X补=1,0110110+1=1,0110111 X补= 27+1 +X=100000000-1001001= 1,011011110 0 0 0 0 0 0 0- 1 0 0 1 0 0 11, 0 1 1 0 1 1 1,由Y补求-Y补(求机器负数),解:以小数补码为例。设y补y0y1y2yn第一种情况, y补0.y1y2yn所以y= 0.
20、y1y2yn,故-y=- 0.y1y2yn则 -y补=第二种情况, y补1.y1y2yn运算过程:连同符号一起将补码各位取反,末位再加1。 设字长N=8位 例:X= +100 1001X补 = 01001001-X补= 10110111,补码最大的优点就是将减法运算转换成加法运算,X补-Y补= X补+-Y补例如 X=(11)10=(1011)2 Y=(5)10=(0101)2 已知字长n=5位 X补-Y补 =X补+-Y补 =0,1011+1,1011=10,0110=0,0110=(6)10 注:最高1位已经超过字长故应丢掉,变形补码,为了便于判断运算结构是否溢出,某些计算机还采用了一种双符号
21、位的补码表示方法,称为变形补码。假定变形补码的有效数值部分位数为n,则负数变形补码的表示定义为: 负整数:X补=2n+2 + X 负小数: X补=4 + X因为这种补码小数的模数为4,因此也称模4补码。在双符号位中,左符是真正的符号位,右符用来判别“溢出”。,2.1.5 反码表示法,反码的概念:正数的表示与原、补码相同,负数的反码符号位为1,数值位是将原码的数值按位取反,就得到该数的反码表示。反码通常用来作为原码求补码或者由补码求原码的中间过渡。,整数反码,0,X 2n X 0X反=(2n+1 -1)+X 0 X -2n (mod (2n+1 -1)例:X1=+1011011, X1 反 =0
22、,1011011X2= -1011011, X2 反 =1,01001001 1 1 1 1 1 1 1 - 1 0 1 1 0 1 11 0 1 0 0 1 0 0 +0反=00000000; -0反 =11111111,X 1 X 0 X反=(2- 2-n)+X 0 X -1 (mod (2-2-n)X1=+0.1011011 , X1 反 =0.1011011 X2= -0.1011011 , X2 反 =1.01001001. 1 1 1 1 1 1 1- 0. 1 0 1 1 0 1 11. 0 1 0 0 1 0 0,小数反码,2.1.6 码制表示法小结,原码:真值的直观表示; 补
23、码:真值的加减运算; 原码符号位不变,数值位“取反加一”。 变形补码:补码运算溢出判断; 双符号位补码。X原、X反 、X补用“0”表示正号,用“1”表示负号; 如果X为正数,则X原=X反=X补。 如果X为0,则X补有唯一编码, X原、X反有两种编码。 求-X补,将X补连同符号一起各位取反,末位加1。,三种编码的表示,2.2 机器数的定点表示与浮点表示,相关概念,数值范围:一种数据类型所能表示的最大值和最小值。 数据精度:实数所能表示的有效数字位数。 数值范围和数据精度均与使用多少位二进制位数以及编码方式有关。 计算机用数字表示正负,隐含规定小数点。采用“定点”、“浮点”两种表示形式。,2.2.
24、1 定点表示法,(1)定点整数小数点位置固定在数的最低位之后 若采用原码,则范围为: -(2n-1) 2n -1 其中n表示数值位的位数。 (2)定点小数小数点位置固定在数的符号位之后、数值最高位之前。若采用原码,则范围为:-(1-2-n) 1-2-n,数符,数值部分,小数点位置,数符,数值部分,或,小数点位置,小数点的位置根据需要而浮动,这就是浮点数。例如:N=MrE式中:r为浮点数阶码的底,与尾数的基数相同,可取2、4、8或16等,通常r=2。E和M都是带符号数,E叫做阶码,M叫做尾数。,2.2.2 浮点表示法,浮点数的底是隐含的,在整个机器数中不出现。阶码的符号位为es,阶码的大小反映了
25、在数N中小数点的实际位置;尾数的符号位为ms,它是整个浮点数的符位,表示了该浮点数的正负。,浮点数的一般格式,1.浮点数的表示范围,上溢:浮点数阶码大于最大阶码时,称为“上溢”,此时机器停止运算,进行中断溢出处理。 下溢:浮点数阶码小于最小阶码时,称为“下溢”,由于此时“溢出”的数绝对值很小,通常将尾数各位强制为零,按机器零处理,此时机器继续运行。,数符,数值部分,小数点位置,阶符,阶码的数值部分,下溢,2.规格化浮点数,目的:字长固定的情况下提高表示精度的措施: 增加尾数位数(但数值范围减小)。 采用浮点规格化形式。规格化:将非规格化数转换成规格化数的过程。,规格化方法,当基数为2时,尾数最
26、高位为1的数为规格化数。 1、向左规格化出现0.0xxx就不是规格化数向左规格化规则:尾数左移1位,阶码减1。 2、向右规格化向右规格化规则:尾数右移1位,阶码加1。,规格化方法,当基数为4时,尾数最高两位不全为0的数为规格化数。 1、向左规格化出现0.00xxx就不是规格化数向左规格化规则:尾数左移2位,阶码减1。 2、向右规格化尾数的绝对值大于1,向左破坏了规格化。向右规格化规则:尾数右移2位,阶码加1。 当基数为8时,尾数最高两位不全为0的数为规格化数。 1、向左规格化出现0.000xxx就不是规格化数向左规格化规则:尾数左移3位,阶码减1。 2、向右规格化尾数的绝对值大于1,向左破坏了
27、规格化。向右规格化规则:尾数右移3位,阶码加1。,浮点数的表示范围和精度,一旦浮点数的位数确定以后,合理分配阶码和尾数的位数,直接影响浮点数的表示范围和精度。 阶码越长,表示范围越大; 尾数越长,表示精度越高。 基数对数的表示范围也有影响。 一般来说,基数r越大,可表示的浮点数范围越宽,而且所表示的数的个数也越多。但r越大,浮点数的精度反而下降。 例如:r=16的浮点数,引起规格化的尾数最高三位可能出现零,故与其尾数位数相同的r=2的浮点数相比,后者可能比前者多三位精度。 基数是隐含的,浮点机中一旦基数确定后就不再变了。,2.2.3 移码表示法,移码定义:X移= 2n + X 2nX -2n
28、移码就是真值加上一个常数(也称为叫偏移值)。,例: X1 = 101 0101 X1补=0,101 0101 X1移=1,101 0101 X2 = -101 0101 X2补=1,010 1011 X2移=0,010 1011,X=0时, +0移=27+0=1,0000000 -0移=27-0=1,0000000 移码表示中0的也是唯一的。移码与补码符号位相反。,引入移码的原因:当真值用补码表示时,由于符号位和数值部分一起编码,难于从补码形式上直接判断其真值的大小。 例如:x=21,y=-21,X补=0,0010101, y补=1,1101011。从二进制码看, 会得出11101011 00
29、010101的结论。,偏置值为2n的移码的特点,在移码中,最高位为“0”表示负数,最高位为“1”表示正数。移码为全0时,它所对应的真值最小,为全1时,它所对应的真值最大。真值0在移码中的表示形式是唯一的,即+0移=-0移=1000。移码把真值映射到一个正数域,所以可将移码视为无符号数,直接按无符号数规则比较大小。同一数值的移码和补码除最高位相反外,其他各位相同。,1.定点、浮点表示法的区别 数值的表示范围假设定点数和浮点数的字长相同,浮点表示法所能表示的数值范围将远远大于定点数。 精度对于字长相同的定点数和浮点数来说,浮点数虽然扩大了数的表示范围,但这正是以降低精度为代价的,也就是数轴上各点的
30、排列更稀疏了。,2.2.4 定点、浮点表示法和定点、浮点计算机,数的运算浮点运算要比定点运算复杂得多。 溢出处理在定点运算时,当运算结果超出数的表示范围,就发生溢出。而在浮点运算时,运算结果超出尾数的表示范围却并不一定溢出,只有当阶码超出所能表示的范围时,才发生溢出。 通用的大型机采用浮点数,或同时采用定、浮点数;小型、微型及某些专用机、控制机采用定点数。当需作浮点运算时,可通过软件实现,也可通过外加的浮点扩展硬件(如协处理器)来实现。,1.定点、浮点表示法的区别(续),机器零,当一个浮点数尾数为0时,不论其阶码为何值;或阶码等于或小于它所能表示的最小数时,不管其尾数为何值,机器都把该浮点数当
31、作零看待,并称之为“机器零”。,2.定点机与浮点机,通常可以将计算机分为几档: 定点机以定点运算为主,浮点运算是通过软件来实现的。 定点机浮点运算部件浮点运算部件是专门用于对浮点数进行运算的部件。 浮点机具有浮点运算指令和基本的浮点运算器。,2.2.6 IEEE754标准格式,现代计算机中浮点数采用的标准。 按IEEE标准,常用的浮点数有三种,小数点位置,数符,阶码用移码,阶码的真值都被加上一个常数(偏移量),如短实数、长实数和临时实数的偏移量分别用16进制表示为7FH、3FFH、3FFFH。 尾数部分通常用规格化表示,即非“0”的有效位最高位总是“1”。 但在IEEE标准中,尾数有效位呈如下
32、形式: 1fffffff其中表示假想的二进制小数点。在实际表示中,对于短实数和长实数,这个整数位的“1”被省略,称为“隐藏位”;对临时实数不采用隐藏位方案。,例13:将(100.25)10转换成短浮点数格式。 十进制数二进制数(100.25)10=(1100100.01)2 非规格化数规格化数1100100.01=1.1001000126 计算移码表示的阶码(偏置值阶码真值)1111111+110=10000101 以短浮点数格式存储该数。符号位=0阶码=10000101尾数=10010001000000000000000 短浮点数代码为0;100 0010 1;100 1000 1000 0
33、000 0000 0000表示为十六进制的代码:42C88000H。,例14:把短浮点数C1C90000H转换成为十进制数。 十六进制二进制形式,并分离出符号位、阶码和尾数。C1C90000H=1;10000011;10010010000000000000000, 计算出阶码真值(移码偏置值)10000011-1111111=100 以规格化二进制数形式写出此数1.100100124 写成非规格化二进制数形式11001.001 转换成十进制数,并加上符号位。(11001.001)2=(25.125)10 所以,该浮点数=-25.125,2.3 非数值数据的表示,非数值数据,又称为字符数据,通常
34、是指字符、字符串、图形符号和汉字等各种数据,它们不用来表示数值的大小,一般情况下不对它们进行算术运算。,2.3.1 字符和字符串的表示,1.ASCII字符编码常见的ASCII码用七位二进制表示一个字符,它包括10个十进制数字(09)、52个英文大写和小写字母(AZ,az)、34个专用符号和32个控制符号,共计128个字符。在计算机中,通常用一个字节来存放一个字符。在ASCII码表中,数字和英文字母都是按顺序排列的,只要知道其中一个的二进制代码,不要查表就可以推导出其他数字或字母的二进制代码。,ASCII字符编码表,2.字符串的存放,字符串是指一串连续的字符。例如,字符串IF X0 THEN R
35、EAD (C)。向量存放法在存储器中占用一片连续的空间,每个字节存放一个字符代码,字符串的所有元素(字符)在物理上是邻接的。在字长为32位的存储器,每一个主存单元可存放4个字符,整个字符串需5个主存单元。在每个字节中实际存放的是相应字符的ASCII码。,字符串的向量存放方案,图2-7 字符串的向量存放方案,1.汉字国标码汉字国标码亦可称为汉字交换码,主要用于汉字信息处理系统之间或者通信系统之间交换信息使用,简称GB码。该标准共收集常用汉字6 763个,另外还有各种图形符号682个,共计7 445个。GB码规定每个汉字、图形符号都用两个字节表示,每个字节只使用低七位编码,因此最多能表示出1281
36、28=16 384个汉字。,2.3.2 汉字的表示,区位码将汉字编码码中的6 763个汉字分为94个区,每个区中包含94个汉字(位),区和位组成一个二维数组,每个汉字在数组中对应一个唯一的区位码。汉字的区位码定长4位,前2位表示区号,后2位表示位号,区号和位号用十进制数表示,区号从01到94,位号也从01到94。例如,“中”字在54区的48位上,其区位码为“54-48”,“国”字在25区的90位上,其区位码为“25-90”。,2.汉字区位码,需要注意的是:汉字区位码并不等于汉字国标码,它们两者之间的关系可用以下公式表示:国标码区位码(十六进制)2020H例15:已知汉字“春”的区位码为“20-
37、26”,计算它的国标码。区位码:第1字节 第2字节20 26 十进制 14H 1AH 十六进制+20H +20H国标码: 34H 3AH,2.汉字区位码(续),汉字在计算机内部其内码是唯一的。因为汉字处理系统要保证中西文的兼容,当系统中同时存在ASCII码和汉字国标码时,将会产生二义性。例如:有两个字节的内容为30H和21H,它既可表示汉字“啊”的国标码,又可表示西文“0”和“!”的ASCII码。为此,汉字机内码应对国标码加以适当处理和变换。GB码的机内码为二字节长的代码,它是在相应GB码的每个字节最高位上加“1”,即汉字机内码汉字国标码8080H例如,上述“啊”字的国标码是3021H,其汉字
38、机内码则是B0A1H。,3.汉字机内码,Unicode的基本方法是用一个16位的数来表示每个符号,这种符号集可表示65536个不同的字符或符号。被称为基本多语言平面(BMP)。这个空间已经非常大了,但设计者考虑到将来某一天它可能也会不够用,所以采用了一种可使这种表示法使用得更远的方法。,2.3.3 统一代码,当用两字节来表示Unicode字符时,使用的是UCS-2编码,但尽管如此,也允许在UCS-2文本中插入一些UCS-4字符。为此,在BMP中,保留了两个大小为1024的块,这两个块中任何位置都不能用来表示任何符号。UCS-4的两个16位字每个表示一个数,这个数是UCS-2 BMP中1024个
39、数值中的一个。这两个数的组合可以表示多达100多万个自定义的UCS-4字符。,2.3.3 统一代码(续),PC机中表示符号的3种方法,图2-8 PC机中表示符号的3种方法,2.4 十进制数和数串的表示,十进制是人们最常用的数据表示方法,一些通用性较强的计算机上设有十进制数据的表示,可以直接对十进制数进行运算和处理。,2.4.1 十进制数的编码,用四位二进制数来表示一位十进制数,称为二进制编码的十进制数,简称BCD码。四位二进制数可以组合出16种代码,能表示16种不同的状态,我们只需要使用其中的10种状态,就可以表示十进制数的09十个数码,而其他的六种状态为冗余状态。由于可以取任意的10种代码来
40、表示十个数码,所以就可能产生多种BCD编码。BCD编码既具有二进制数的形式,又保持了十进制数的特点。,几种常见的BCD码,1.8421码,8421码又称为NBCD码,其主要特点是: 它是一种有权码,四位二进制代码的位权从高到低分别为8、4、2、1。 简单直观。每个代码与它所代表的十进制数之间符合二进制数和十进制数相互转换的规则。 不允许出现10101111。这6个代码在8421码中是非法码。,2.2421码,2421码的主要特点是: 它也是一种有权码,四位二进制代码的位权从高到低分别为2、4、2、1。 它又是一种对9的自补码。即某数的2421码,只要自身按位取反,就能得到该数对9之补的2421
41、码。例如:3的2421码是0011。3对9之补是6,而6的2421码是1100。 不允许出现01011010。这6个代码在2421码中是非法码。,3.余3码,余3码的主要特点是: 这是一种无权码,但也可看作是一种特殊的有权码,即在8421码的基础上加+3(+0011)形成的,故称余3码。在这种编码中各位的“1”不表示一个固定的十进制数值,因而不直观。 它也是一种对9的自补码。 不允许出现00000010、11011111。这6个代码在余3码中是非法码。,2.4.2 十进制数串,1.非压缩的十进制数串非压缩的十进制数串中一个字节存放一个十进制数或符号的ASCII-7码。非压缩的十进制数串又分成前
42、分隔式数字串和后嵌入式数字串两种格式。在前分隔式数字串中,符号位占用单独一个字节,放在数值位之前,正号对应的ASCII码为2BH,负号对应的ASCII码为2DH。在后嵌入式数字串中,符号位不单独占用一个字节,而是嵌入到最低一位数字里边去。若数串为正,则最低一位数字09的ASCII码不变(30H39H);若数串为负,把负号变为40H,并将其与最低数值位相加,此时数字09的ASCII码变为70H79H。,2.压缩的十进制数串,压缩的十进制数串,一个字节可存放两位BCD码表示的十进制数,既节省了存储空间,又便于直接进行十进制算术运算。 在主存中,一个压缩的十进制数串占用连续的多个字节,每位数字仅占半
43、个字节,其值常用8421码表示。符号位也占半个字节,并存放在最低数值位之后,通常用CH表示正号,DH表示负号。在这种表示中,规定数字的个数加符号位之和必须为偶数;当和为奇数时,应在最高数值位之前补0H(即第一个字节的高半字节为“0000”)。,2.5 现代微机系统中的数据表示举例,现代的微机系统大多采用Intel系列的微处理器,近年来,Intel的微处理器有了极大的发展,形成了IA-32结构。IA-32结构的基本数据类型是字节、字、双字、四字和双四字。,IA-32结构的基本数据类型,图2-9 IA-32结构的基本数据类型,1.无符号整数,无符号整数是包含字节、字、双字和四字的无符号的二进制数。
44、无符号整数的范围,对于字节,从0255;对于字,从065535;对于双字,从0232 -1;对于四字,从0264-1。2.带符号整数带符号整数是包含字节、字、双字和四字的带符号的二进制定点整数。正数的符号位为0,负数的符号位为1。对于字节,从-128+127;对于字,从-32768+32767;对于双字,从-231+231-1;对于四字,从-263+263-1。,3.浮点数,与IEEE 754标准所规定的格式直接对应。 4.指针数据指针是主存单元的地址,IA-32 结构定义了两种类型的指针:近指针(32位)和远指针(48位)。 5.串数据 包括位串、字节串、字串和双字串。一个串可以包含从一个字
45、节到4GB的内容。,6.BCD数,IA-32 结构中所指的BCD码实际上是指8421码。BCD数又分成未拼装的BCD(UBCD)数和拼装的BCD数两种。UBCD数的一个字节仅包含一位十进制数,在30位上;而经过拼装的BCD数,一个字节包含两位十进制数,其低位在30位上,高位在74位上。,2.6 数据校验码,1.数据校验码:指那些能够发现错误或能够自动纠正错误的数据编码,又称之为“检错纠错编码”。 2.码距任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数。,2.6.1 奇偶校验码,1.奇偶校验概念奇偶校验码是一种最简单的数据校验码,它的码距等于2,可以检测出一位错误(或奇数位错误),但不能确定出错的位置,也不能检测出偶数位错误。奇偶校验实现方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。,奇偶校验规律,校验位的取值(0或1)将使整个校验码中“1”的个数为奇数或偶数,所以有两种可供选择的校验规律:奇校验整个校验码(有效信息位和校验位)中“1”的个数为奇数。偶校验整个校验码中“1”的个数为偶数。,