您的位置: 网站首页 > 公共课 > 计算机应用基础 > 第1章 微型计算机系统概论 > 【1.2 基于计算机的信息表示】

1.2 基于计算机的信息表示

 

1.2  基于计算机的信息表示

数据是指能够输入计算机并被计算机处理的数字、字母和符号的组合,在计算机内部,任何形式的数据都必须经过数字化编码后才能被传送、存储和处理。

1.2.1  数制与数制间的转换

在日常生活中,会遇到不同进制的数,如十进制数、逢十进一;一周有7天,逢七进一等。计算机中存放的是二进制数,为了书写和表示方便,还引入了八进制数和十六进制数。无论哪种数值,其共同之处都是进位计数制。

1.进位计数制

在采用进位计数制的数字系统中,如果只用r个基本符号表示数值,则称其为基r数制,r称为该数制的基数,而数值中每一固定位置对应的单位值称为权。表1-1是常用的几种进位计数制。

1-1  常用的各种进位计数制的表示

进位制

二进制

八进制

十进制

十六进制

规则

逢二进一

逢八进一

逢十进一

逢十六进一

基数

r=2

r=8

r=10

r=16

基本符号

0,1

0,1,2,…,7

0,1,2,…,9

0,1,…,9,A,B,…,F

2i

8i

10i

16i

表示形式

B

O

D

H

由上表可知,不同进制的数制有共同的特点:第一,采用进位计数制方法,每一种数值都有固定的基本符号,称为“数码”;第二,都使用位置表示法,即处于不同位置的数码所代表的值不同,与它所在的位置的“权”值有关。

例如,在十进制数值中,847.26可表示为:

847.26 = 8×102 + 4×101 + 7×100 + 2×10-1+ 6×10-2

可以看出,各种进位计数制中的权的值恰好是基数r的某次幂。因此,对任何一种进位计数制表示的数都可以写出按权展开的多项式之和,任意一个r进制数N可表示为:

N= an-1×rn-1+an-2  ×rn-2+ … +a1×r1+a0×r0+a-1×r-1+…+ a-m×r-m=

其中,ai是数码,r是基数,ri是权;不同的基数,表示不同的进制数。

2.不同进位计数制的转换

1r进制数转换成十进制数。

展开式:

N=

计算机本身就提供了将r进制数转换成十进制数的方法。只要将各位数码乘以各自的权值累加即可。例如,将二进制数1001101.001转换成十进制数:

(1001101.001)B = 1×26 + 1×23 + 1×22 + 1×20 + 1×2-3=(77.125)D

例如,将八进制数526转换成十进制数:

(526)O = 5×82 + 2×81 + 6×80 = (322)D

2十进制数转换成r进制数

将十进制数转换成r进制数时,可将此数分成整数与小数两部分分别转换,然后拼接起来即可。

整数部分转换成r进制数采用除r取余法,即将十进制整数不断除以r取余数,直到商为0,余数从右到左排列,首次取得余数排在最右。

小数部分转换成r进制数采用乘r取整法,即将十进制小数不断乘以r取整数,直到小数部分为0或达到要求的精度为止(小数部分可能永远得不到0);所得的整数从小数点自左往右排列,取有效精度,首次取得整数排在最左。

例如,将(120.675)D转换成二进制数:

整数部分                                       小数部分

2 120      取余数                      0.675           取走整数

       2 60      ……0  a0                            ×2  

        2 30     ……0  a1                              1.350             1  a-1    

         2 15    ……0  a2                               ×2   

          2 7    ……1  a3                                0.70              0  a-2

           2 3   ……1  a4                               ×2

            2 1   …...1  a5                               1.40                    1  a-3

              0  ……1  a6                   ×2

                                                         0.80              0  a-4

                                                         ×2

                                              1.60              1  a-5  

转换结果为:

(120.675)D =(a6 a5 a4 a3 a2 a1 a0. a-1a-2a-3a-4a-5)B =(1111000.10101)B

例如,将十进制数268.06转换成八进制数:

8 268       取余数                           0.06      

  8 33    …… 4                             ×8          取走整数

    8 4   …… 1                             0.48             0

      0   ……4                             ×8

                                            3.84             3 

                                            ×8

                                            6.72             6

所以,(268.06)D =(414.036)O

3)二进制数、八进制数、十六进制数间的转换。

由上例看到,十进制数转换成二进制数过程书写较长;同样,二进制表示的数比等值的十进制数占更多的位数,书写较长,容易出错。为了方便起见,人们借助八进制数和十六进制数来进行转换和表示。转换时将十进制数转换成八进制数或十六进制数,再转换成二进制数。二进制、八进制和十六进制之间存在的关系如下:1位八进制数相当于3位二进制数,1位十六进制数相当于4位二进制数,如表1-2所示。

1-2  八进制数与二进制数、十六进制数与二进制数之间的关系

八进制数

对应二进制数

十六进制数

对应二进制数

十六进制数

对应二进制数

0

000

0

0000

8

1000

1

001

1

0001

9

1001

2

010

2

0010

A

1010

3

011

3

0011

B

1011

4

100

4

0100

C

1100

5

101

5

0101

D

1101

6

110

6

0110

E

1110

7

111

7

0111

F

1111

根据这种对应关系,二进制数转换成八进制数时,以小数点为中心向左右两边分组,每3位为一组,两头不足3位补0即可。同样,二进制数转换成十六进制数只要4位为一组进行分组即可。

例如,将二进制数(1011010010.111110)B转换成十六进制数:

(0010 1101 0010. 1111 1000)B =(2D2.F8)H (整数高位和小数低位补0

2    D   2    F   8

例如,将二进制数(1011010010.111110)B转换成八进制数:

(001 011 010 010. 111 110)B =(1322.76)O

同样,将八进制数、十六进制数转换成二进制数只要将1位转化为3位或4位即可。例如:

(3B6F.E6)H = (0011 1011 0110 1111. 1110 0110)B

          3    B   6   F    E   6

(6732.26)O = (110 111 011 010. 010 110)B

          6   7  3  2   2   6

1.2.2  数值信息的二进制表示

1.符号数的计机器数表示

数在计算机中的表示统称为机器数。机器数有以下三个特点。

1)数的符号数值化。在计算机中,因为只有01两种形式,为了表示数的正(+)、负(-)号,也必须以01表示。通常把一个数的最高位定义为符号位,用0表示正,1表示负,称为数符;其余位仍表示数值。若一个数占8位,则其表示形式如图1-1所示。

1

1

0

1

1

0

0

1

            

                    数符 

1-1  机器数

通常,把在机器内存放的正、负符号数值化的数称为机器数,机器数对应的数值称为机器数的真值数。例如,真值数(-1011001)B,其机器数为11011001,存放在机器中如图1-1所示。

2)计算机中通常只表示整数和纯小数。因此,小数点约定在一个固定的位置上,不再占用1个数位。

3)机器数表示的范围受到字长和数据的类型的限制。例如,若表示一个整数,字长为8位,最大值01111111,最高位是符号位,因此此数的最大值为127。若数值超出127,就要溢出。可以用浮点数来表示较大或较小的数。

2.定点数与浮点数

定点数约定小数点隐含在某一固定的位置上,称为定点数表示法;浮点数是指小数点位置可以任意浮动,称为浮点数表示法。

1)定点数表示法。

定点数表示法有两种约定,定点整数和定点小数。

定点整数约定小数点位置在机器数的最右边,如图1-2所示,定点整数是纯整数。

            

1-2  定点数表示

定点整数分为带符号数和不带符号数两类。对带符号数的整数,符号位被放在最高位。整数表示的数是精确的,但数的范围是有限的。根据存放的数的字长,可以用8位、16位、32位等表示。当以补码形式表示时,各自表示的数的范围如表1-3所示。

1-3  不同位数和数的表示范围

二进制位数

无符号整数的表示范围

有符号整数的表示范围

8

0~(28-1

-27~(27-1

16

0~(216-1

-215~(215-1

32

0~(232-1

-231~(231-1

例如,假定整数占8位,则数值-88存放的形式如图1-3所示。

1

1

0

1

1

0

0

0

1-3  -88的存放形式

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

2)浮点数表示法。

定点数表示的数值范围在许多应用中是不够的,尤其在科学计算中,为了能表示特大或特小的数,采用“浮点数”或“科学表示法”表示。“浮点数”由两部分组成,即尾数和阶码,底数是事先约定的,在机器数中不出现。

例如,0.657×105,则0.657为尾数,5是阶码。

在浮点表示方法中,小数点的位置是浮动的,阶码可以取不同的数值。例如,十进制数-2346.4568可表示为-2.3464568×10+3-2346.4568×100-2346456.8×10-3等多种形式。为了便于计算机中小数点的表示,规定将浮点数写成规格化的形式,即尾数的绝对值大于等于0.1并且小于1,从而唯一地规定了小数点的位置。十进制数-2346.4568以规格化形式表示为:

-0.23464568×104

同样,任意二进制规格化浮点数的表示形式为:

N=

式中d是尾数,前面的“±”表示数符;p是阶码,前面的“±”表示阶符。它在计算机内的存储形式如图1-4所示。

阶符

阶码

数符

尾数

1-4  任意二进制规整化浮点数的表示形式

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

例如,设尾数为8位,阶码为6位,则下面的二进制浮点数的存放形式如图1-5所示。

N =(-1011.011)B = (-0.1011011)B×2(100)B

1-5  N =(-1011.011)B浮点数的存放形式

3.带符号数的表示

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

                                             10000110      ……     -6的机器数

                                          +  00000010      ……     2的机器数

                        10001000      …….    运算结果为-8

若考虑符号位的处理,则运算将变得复杂。为了解决此类问题,在机器数中的负数有三种表示法:原码、反码和补码。

1)原码。

整数X的原码指:其数符位0表示正,1表示负;其数值部分就是X绝对值的二进制表示。通常用[X]表示X的原码。

例如,[+1]= 00000001                           [-1]=10000001

      [+127]=01111111                  [-127]=11111111

在原码表示中,0有两种表示形式,即:

[+0]= 00000000               [-0]=10000000

由此可知,8位原码表示的最大值为127,最小值为-127,表示数的范围为-127127

原码表示法简单易懂,与其真值的转换方便,但当两个数做加法运算时,如果两数码符号相同,则数值相加,符号不变;如果两数码符号不同,数值部分实际上是相减,这时必须比较哪个数的绝对值大,才能决定运算结果的符号位及值。

2)反码。

整数X的反码指:对于正数与原码相同;对于负数,数符位为1,其数值位X的绝对值取反。通常用[X]表示X的反码。

例如,[+1]= 00000001                           [-1]=11111110

      [+127]=01111111                  [-127]=10000000

在反码表示中,0也有两种表示形式,即:

[+0]= 00000000                 [-0]=11111111

由此可知,8位反码表示的最大值、最小值和表示数的范围与原码相同。

3)补码。

整数X的补码指:对于正数与原码相同;对于负数,数符位为1,其数值位X的绝对值取反最右加1,即反码加1。通常用[X]表示X的补码。

例如,[+1]= 00000001                           [-1]=11111111

      [+127]=01111111                  [-127]=10000001

在补码表示中,0有唯一的编码:

[+0]= [-0]= 00000000

因而可以用多出来的一个编码10000000来扩展补码所能表示数的范围,即将最小负数-127扩大到-128。这里的最高位既可以看成是符号位负数,又可以表示为数值位,其值为-128。这就是补码与原码、反码最小值不同的原因。

补码运算方便,二进制的减法运算可用补码实现,使用较为广泛。例如,5–9的运算如下:

   00000101   ……5的补码

+  11110111   ……-9的补码

   11111100

运算结果为11111100,是-4的补码形式。

1.2.3  非数值信息的二进制表示

字符是计算机中使用最多的信息形式之一,它是人与计算机进行通信、交互的重要媒介。它包括了西文字符和中文字符。由于计算机是以二进制的形式存储和处理的,因此字符也必须按照特定的规则进行二进制编码才能进入计算机。

1.西文字符

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

1-4  7ASCII代码表

     d6d5d4

d3d2d1d0

000

001

010

011

100

101

110

111

0000

NUL

DLE

SP

0

@

P

`

p

0001

SOH

DC1

!

1

A

Q

a

q

0010

STX

DC2

2

B

R

b

r

0011

ETX

DC3

#

3

C

S

c

s

0100

EOT

DC4

$

4

D

T

d

t

0101

END

NAK

%

5

E

U

e

u

0110

ACK

SYN

&

6

F

V

f

v

0111

BEL

ETB

,

7

G

W

g

W

1000

BS

CAN

(

8

H

X

H

X

1001

HT

EM

)

9

I

Y

I

Y

1010

LF

SUB

*

:

J

Z

J

Z

1011

VT

ESC

+

;

K

[

K

{

1100

FF

FS

L

\

L

|

1101

CR

GS

-

=

M

]

M

}

1110

SO

RS

.

N

N

1111

SI

US

/

?

O

O

DEL

其中常用的控制字符的作用如下。

BSBack Space):退格。        HTHorizontal Table):水平制表。

LFLine Feed):换行。          VTVertical Table):垂直制表。

FFForm Feed):换页。         CRCarriage Return):回车。

CANCancel):取消。           ESCEscape):换码。

SPSpace):空格。                DELDelete):删除。

ASCII码表中看出,十进制码值032 127(即NULSPDEL)共34个字符,称为非图形字符(控制符);其余94个字符称为图形字符。

计算机的内部存储与操作以字节为单位,即以8个二进制位为单位。因此,一个字符在机算机内实际是用8位表示。正常情况下,最高位d70。在需要奇偶校验时,这一位可用于存放奇偶校验位的值,此时称该位为校验位。

西文字符除了常用的ASCII编码外,还有一种扩展的二—十进制交换码(Extended Binary Coded Decimal Interchange CodeEBCDIC),这种字符编码主要用在大型机器中。

EBCDIC码采用8位基2表示,有256个编码状态,但往往只选用其中一部分。

2.中文字符

输入码

国标码

机内码

地址码

 

字形码

用计算机处理汉字时,必须先将汉字代码化。汉字是象形文字,种类繁多,编码比较困难,而且在一个汉字处理系统中,输入、内部处理、输出对汉字编码的要求不尽相同,因此要进行一系列的汉字编码及转换。汉字信息处理中各编码及流程如图1-6所示,其中虚框中的编码对国标码而言。

 

汉字输入                                                                          汉字输出

1-6  汉字信息处理系统的模型

1)汉字输入码。

在机算机系统中使用汉字,首先遇到的问题是如何把汉字输入到计算机内。为了能直接使用西文标准键盘进行输入,必须为汉字设计相应的编码方法。汉字编码方法主要分为三类:数字编码、拼音码和字形编码。

数字编码就是用数字串代表一个汉字的输入,常用的是国标区位码。国标区位码根据国家标准局公布的6763个两级汉字(一级汉字有3755个,按汉语拼音排列;二级汉字有3008个,按偏旁部首排列)分成94个区,每个区分94位,实际上是把汉字表示成二维数组,区码和位码各两位十进制数字,因此,输入一个汉字需要按键4次。

拼音码是以汉语读音为基础的输入方法。由于汉字的同音字太多,输入重码率很高,因此,按拼音输入后还必须进行同音字选择,影响了输入速度。

字形编码是以汉字的形状确定的编码。汉字的总数虽多,但都是由一笔一画组成,全部汉字的部首和笔画是有限的。因此,把汉字的部首和笔画用字母或数字进行编码,按笔画书写的顺序依次输入,就能表示一个汉字。五笔字型、表形码等便是这种编码法。

2)内部码。

内部码是字符在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输字符用的代码。一个国标码占两个字节,每个字节最高位仍为0;英文字符的机内码是7ASCII码,最高位也为0,为了在计算机内部能够区分是汉字编码还是ASCII码,将国标码的每个字节的最高位由0变为1,变换后的国标码成为汉字机内码,由此可知汉字机内码的每个字节都大于128,而每个西文字符的ASCII码值均小于128。以汉字“大”为例,国标码为3473H,机内码为B4F3H

3)字形码。

汉字字形码是表示汉字字形的字模数据,通常用点阵、矢量函数等方式表示。用点阵表示字形时,汉字字形码指的就是这个汉字字形点阵的代码。根据输出的汉字的要求不同,点阵的多少也不同。简易型汉字为16×16点阵,提高型汉字为24×24点阵、32×32点阵、48×48点阵等。

点阵规模愈大,字形愈清晰美观,所占用的存储的空间也愈大。以16×16点阵为例,每个汉字要占用32B存储空间,两级汉字大约占用256KB。因此,字模点阵用来构成“字库”,字库中存储了每个汉字的点阵代码,当显示输出时检索字库,输出字模点阵得到字形。