数制与编码动画

    任何形式的数据,无论是数字、文字、图形、图像、声音、视频,进入计算机都必须进行01的二进制编码转换,同样,从计算机输出的数据,进行逆向的转换,过程见图2.3.1

 数值

     符号数的机器数表示

 

    在计算机中,因为只有"0""1"两种形式,为了表示数的正("+")、负("")号,也必须以"0""1"表示。通常把一个数的最高位定义为符号位,用0表示正,1表示负,称为数符;其余位仍表示数值。若个数占8位,表示形式见图2.3.2
    
通常,把在机器内存放的正、负符号数值化的数称为机器数,机器数对应的数值称为机器数的真值数。例如,真值数(-0101100B,其机器数为10101100,存放在机器中见图2.3.2

    
计算机中通常只表示整数和纯小数 因此,小数点约定在一个固定的位置上,不再占用1个数位。机器数表示的范围受到字长和数据的类型的限制 例如,若表示一个整数,字长为8位,最大值01111111,最高位是符号位,因此此数的最大值为127。若数值超出127,就要"溢出"。为了表示较大或较小的数,用浮点数来表示。

     定点数和浮点数

 

    定点数约定小数点隐含在某一固定位置上,称为定点数表示法;浮点数是指小数点位置可以任意浮动,称为浮点数表示法。
定点数表示法     
1)
定点整数
    
定点整数约定小数点位置在机器数的最右边,见图2.3.3,定点整数是纯整数。

    
定点整数分为带符号和带符号的两类。对带符号的整数,符号位被放在最高位。整数表示的数是精确的,但数的范围是有限的。
    
例如,假定整数占8位,则数值-65存放的形式如下:

2)
定点小数
    
定点小数约定小数点位置在符号位、有效数值部分之间,见图2.3.4。定点小数是纯小数,即所有数均小于1

浮点数表示
    "
浮点数"由两部分组成,即尾数和阶码,底数是事先约定的,在机器数中不出现。
例如,0.235×104,则0.235为尾数,4是阶码
    
为了便于计算机中小数点的表示,规定将浮点数写成规格化的形式,即尾数的绝对值大于等于0.1并且小于1,从而唯一地规定了小数点的位置。
    
十进制实数-1234.5678以规格化形式表示为:-0.12345678×104
    
同样,任意二进制规格化浮点数的表示形式为: N=±d×2±p
    
式中d是尾数,前面的"±"表示数符;p是阶码,前面的"±"表示阶符。它在计算机内的存储形式如下:

    
阶码只能是一个带符号的整数,阶码本身的小数点约定在阶码最右面;尾数表示数的有效部分,是纯小数,其本身的小数点约定在数符和尾数之间。由此可见,浮点数是定点整数和定点小数的混合。在浮点数表示中,数符和阶符都各占一位,阶码的位数表示数的大小范围,尾数的位数表示数的精度。

     带符号数的表示

 

    从上面讲述的机器数知道,数在存放时由数符位用"0"表示正数,"1"表示负数。机器数在计算时,若将符号位同时和数值参加运算,则会产生错误的结果;否则要考虑计算机结果的符号问题,将增加计算机实现的难度。例如:-5+4的结果应为-1。但在计算机中若按照上面讲的符号位同时和数值参加运算,则运算如下:

    
若要考虑符号位的处理,则运算变得复杂。为了解决此类问题,在机器数中,负数有三种表示法:原码、反码和补码。
    
为了简单起见,这里只以整数为例,而且假定字长为8位。
原码
    
整数X的原码指:其数符位0表示正,1表示负;其数值部分就是X绝对值的二进制表示。通常用[X]原表示X的原码。
例如:
[+1]
=00000001 [+127] =01111111
[-1]
=10000001 [-127] =11111111
    
在原码表示中,零有两种表示形式,即:
[+0]
=00000000 [-0] =10000000
    
由此可知,8位原码表示的最大值为127,最小值为-127,表示数的范围为-127127
    
原码表示法简单易懂,与其真值的转换方便。但当两个数作加法运算时,如果两数码符号相同,则数值相加,符号不变,如果两符号不同,数值部分实际上是相减,这时,必须比较两个数哪个绝对值大,才能决定运算结果的符号位及值。所以,不便于运算。
反码
    
整数X的反码指:对于正数与原码相同;对于负数,数符位为1,其数值位X的绝对值取反。通常用[X]反 表示X的反码。
例如:
[+1]
=00000001 [+127] =01111111
[-1]
=11111110 [-127] =10000000
    
在反码表示中零也有两种表示形式,即:
[+0]
=00000000 [-0] =11111111
    
由此可知,8位反码表示的最大值、最小值和表示数的范围与原码相同。反码运算也不方便。
补码
    
整数X的补码指:对于正数与原码相同;对于负数,数符位为1,其数值位X的绝对值取反最右加1,即为反码加1。通常用[X] 补表示X的补码。
例如:
[+1]
=00000001 [+127] =01111111
[-1]
=11111111 [-127] =10000001
    
在补码表示中,0有唯一的编码:
[+0]
=[-0]=00000000
    
因而可以用多出来的一个编码10000000来扩展补码所能表示的数值范围,即将负数最小-127扩大到-128。这里的最高位"1"既可看作符号位负数,又可表示为数值位,其值为-128。这就是补码与原码、反码最小值不同的原因。
    
利用补码可以方便地进行运算。例如-5+4的运算如下:

    
运算结果为11111111,是 -1的补码形式。
    
又如:(-9+-5)的运算如下:

    
丢失高位1,运算结果机器数为11110010,是 -14的补码形式。
    
由此可见,利用补码可方便地实现正负数的加法运算规则简单,在数的有效存放范围内,符号位如同数值一样参加运算,也允许产生最高位的进位(被丢去),所以使用较广泛。

     数值编码

 

    计算机输入输出的十进制数在机内转换成二进制数时,有时也以一种中间数值编码的形式存在,它把每一位十进制用4位二进制编码表示,称为十进制数的二进制编码BCD码(Binary Code Decimal)。有多种形式的编码,最常用8421BCD码,4个二进制位自左向右每位的权分别是23222120,即8421,故简称为8421
    
要注意的是不要将BCD码与二进制数混淆。
例如,(23D=(10111)B
23D=(100011)BCD

 字符字符编码动画

     西文字符

 

    对西文字符编码最常用的是ASCII 字符编码( American Standard Code for Information Interchange,美国信息交换标准代码)。ASCII是用7位二进制编码,它可以表示27128个字符,见表2.3.3所示。每个字符用7位基2表示,其排列次序为d6d5d4d3d2d1d0d6为高位,d0为低位。

    
ASCII码表中看出,十进制码值032127(即NULUSDEL)共34个字符称为非图形字符(又称为控制字符);其余94个字符称为图形字符(又称为普通字符)。在这些字符中,从"0""9"、从"A""Z"、从"a""z"都是顺序排列的,且小写比大写字母码值大32即位值d501,这有利于大、小写字母之间的编码转换。

      汉字编码

 

    汉字信息处理中各编码及流程见图2.3.5。其中虚框中的编码对国标码而言

汉字国标码
    
把最常用的6763个汉字分成两级:一级汉字有3 755个,按汉语拼音排列;二级汉字有3008个,按偏旁部首排列。将汉字分成若干个区,每个区中94个汉字。由区号和位号(区中的位置)构成了区位码。区号和位号各加32就构成了国标码。
汉字机内码
    
一个国标码占两个字节,每个字节最高位仍为"0";英文字符的机内代码最高位也为"0"。为了在计算机内部能够区分是汉字编码还是ASCII码,将国标码的每个字节的最高由"0"变为"1",变换后的国标码称为汉字机内码。
汉字输入编码
    
这是一种用计算机标准键盘上按键的不同排列组合来对汉字的输入进行编码。目前汉字输入编码法已有很多种,常用的输入法大致分为两类:
音码 主要是以汉语拼音为基础的编码方案,如全拼、双拼、自然码和智能ABC等。
形码 主要是根据汉字的特点,按汉字固有的形状,把汉字先拆分成部首,然后进行组合,代表有五笔字型法、郑码输入法等。
汉字字形码
    
汉字字形码又称汉字字模,用于汉字在显示屏或打印机输出。汉字字形码通常有两种表示方式:点阵和矢量表示方式。     
    
点阵和矢量方式区别;前者编码、存储方式简单、无需转换直接输出;但字形放大后产生的效果差,而且同一种字体不同的点阵需要不同的字库。矢量方式特点正好与前者相反。
汉字地址码
    
每个汉字字形码在汉字字库中的相对位移地址称为汉字地址码。需要向输出设备输出汉字时,必须通过地址码,才能在汉字库中取到所需的字形码,最终在输出设备上形成可见的汉字字形。地址码和机内码要有简明的对应转换关系。
其他汉字编码
    
除了GB码外,目前常用的有:UCS码、Unicode码、GBK码、BIG5等。