第二章 数据的机器表示

41
1 第第第 第第第第第第第 第第第第 第第 第第第第第第 第第 第第第 第第第 第第第 第第第第第第第 、、、,。 第第第第第第第第第第第第 第第第第第第第第第

Upload: onella

Post on 15-Jan-2016

73 views

Category:

Documents


0 download

DESCRIPTION

第二章 数据的机器表示. 主要内容: 真值、机器数的概念 原码、补码、反码、真值,及其相互转换。 定点数与浮点数的表示范围。 字符编码与汉字编码。. A 、 数据的分类. 数据表示的分类: 数值数据表示 无符号数 带符号数 原码、补码、反码、移码 定点、浮点 非数值数据表示 字符数据和字符串 汉字数据 十进制数和数串(自学). B 、 数值型数据的表示方法. 一个预备知识 二进制数 B 、八进制数 Q 十进制数 D (可省略)、十六进制数 H 两个术语定义 - PowerPoint PPT Presentation

TRANSCRIPT

1

第二章 数据的机器表示

主要内容: 真值、机器数的概念

原码、补码、反码、真值,及其相互转换。 定点数与浮点数的表示范围。 字符编码与汉字编码。

2

A 、数据的分类 数据表示的分类:

数值数据表示 无符号数 带符号数

原码、补码、反码、移码 定点、浮点

非数值数据表示 字符数据和字符串 汉字数据

十进制数和数串(自学)

3

B 、数值型数据的表示方法 一个预备知识

二进制数 B 、八进制数 Q 十进制数 D (可省略)、十六进制数 H

两个术语定义 真值:在现实生活中,用正号、负号加绝对值表示数值的

数称为真值,如 123 、 -128 等。 机器数:在计算机内部使用的、连同符号一起数码化了的

数,称为机器数。 要做三件事

区分数据的正负、选择数值的码制、确定小数点的位置。

4

一、带符号数的表示方法 带符号机器数主要有 3 种编码方式:

原码 补码 反码

带符号数最常用的编码方式有 2 种: 原码 补码

5

1 、原码表示 原码表示法规定:一个机器字中,最高位为符号位,符号位

为 0 表示正数,符号位为 1 表示负数,数值部分与真值相同。 若定点小数的原码形式为 x0.x1x2…xn ,则原码表示的定义: [X] 原 =

其中, [X] 原是机器数, X 是真值。 例如, x=+0.1001 ,则 [x] 原 =0.1001

x= -0.1001 ,则 [x] 原 =1.1001

对于正数 x=+0.x1x2…xn , [x] 原 = 0.x1x2…xn

对于负数 x= -0.x1x2…xn , [x] 原 = 1.x1x2…xn

对于 0 ,有两种形式: [+0] 原 = 0.00…0 , [ -0] 原 = 1.00…0

X 0 ≤X < 1

1 – X = 1 + |X| -1 < X≤0 8 位机器字

6

原码表示(续) 若定点整数的原码形式为 xn…x2x1x0 ,定点整数的原码定义:

[x] 原 =

例如, x=+1011 ,则 [x] 原 =00001011

x= -1011 ,则 [x] 原 =10001011

关于原码表示的结论: 真值 0 有两种不同的表示形式( +0 、 -0 ) 小数原码表示范围为: -1<x<1

整数原码表示范围为: -2n <x<2n

原码表示简单易懂,其缺点是加法运算复杂。因为人为约定 0 为正数, 1 为负数,在运算时,符号和数值要分开处理。

X 0 ≤X < 2n

2n – X = 2n + |X| -2n < X≤0

8 位机器字

7

2 、补码表示 补码符号位的表示方法与原码相同,数值部分的表示如下:

对于正数,数值部分与真值的形式相同;对于负数,将真值的数值部分按位求反,最低位加 1 。

若定点小数的补码形式为 x0.x1x2…xn ,则补码的定义:

[X] 补 =

其中, [X] 补是机器数, X 是真值。

X 0 ≤X < 1

2 + X = 2 - |X| - 1≤ X < 0

例如, x=+0.1011 ,则 [x] 补 =0.1011

x= -0.1011 ,则 [x] 补 =1.0101

对于正数 x=+0.x1x2…xn , [x] 补 = 0.x1x2…xn

对于负数 x= -0.x1x2…xn , [x] 补 = 10.0…0-0.x1x2…xn

对于 0 ,只有一种形式 [+0] 补 =[-0] 补 =0.00…0

8 位机器字

8

补码表示(续) 若定点整数的补码形式为 xn…x2x1x0 ,定点整数的补码定义:

[x] 补 =

例如, x = +1011 ,则 [x] 补 = 00001011

x = -1011 ,则 [x] 补 = 11110101

X 0 ≤X < 2n

2n+1 + X = 2n+1 - |X| - 2n≤ X < 0(mod 2n+1)

由真值转换为补码时,很少用补码定义式计算,通常把真值先转换为原码,再由原码转换为补码。事实上,按照对补码定义式的理解,有如下简便的转换方法。

8 位机器字

9

由真值、原码转换为补码 正数的补码表示与原码相同。

如: [x] 原 =0.1010 , [x] 补 =0.1010

负数原码转换为补码的方法之一:符号位保持 1 不变,数值位按位求反,末位加 1 。

如: [x] 原 = 1.1010

按位求反 1.0101

末位加 1 + 1

[x] 补 = 1. 0110

负数原码转换为补码的方法之二:符号位保持 1 不变,在数值位中从低位向高位找 1 ,第一个 1 及其右边的 0 保持不变,数值位的其余部分求反。

如: [x] 原 = 1. 10 10 不变 求反 不变 [x] 补 = 1. 01 10

以上方法与通过补码定义式计算结果完全一致,但更为简便,是实现求补电路的重要依据,也是实现求补电路普遍采用的方法。

10

由补码表示转换为原码与真值 正数补码与原码相同,不需要转换。 负数补码转换为原码,可以采用上述方法,对补码再求补码,

实现逆转换,即对补码再求补码结果为原码。

关于补码表示的结论: 在补码表示中,仍以最高位作为符号位, 0 为正数、 1 为负数。

补码的符号位是数值的一部分,可以和数值位一起参与运算,不需要单独处理。

数值 0 只有一种表示,无 +0 和 -0 之分,补码的负数域不含 0 。 负数补码和原码相比,多出了一个负数 -1 或 -2n 。以 n+1 位整

数为例,原码绝对值最大的负数为 - ( 2n-1 ),而补码绝对值最大的负数为 -2n ,其原因是在补码中 0 只占一个码点。

补码表示可以把减法转化为加法,用一套电路完成加法和减法 .

11

3 、反码表示 反码符号位的表示方法与原码相同,数值部分表示如下:对

于正数,数值部分与真值的形式相同;对于负数,将真值的数值部分按位求反。

若纯小数的反码序列为 x0.x1x2…xn ,则 :(n 为数值的位数 )

[x] 反 =

例如, x = + 0.1101 , [x] 反 = 0.1101

x = - 0.1101 , [x] 反 = 1.0010

X 0 ≤X < 1

(2 – 2-n) + X - 1 < X ≤ 0

12

反码表示(续) 对于正数 x=+0.x1x2…xn , [x] 反 = 0.x1x2…xn

对于负数 x= -0.x1x2…xn , [x] 反 = 1.x1x2…xn

对于 0 ,有两种形式: [+0] 反 = 0.00…0 , [-0] 反 = 1.11…1

若定点整数的补码形式为 xn…x2x1x0 ,定点整数的补码定义:

[x] 反 =

[x] 反 =2-2-n+x , [x] 补 =2+x [x] 补 =[x] 反 +2-n

有以下结论:反码的末位加 1 等于对应的补码。 反码的符号位也可以作为数值位直接参与运算。

X 0 ≤X < 2n

(2n+1 – 1) + X - 2n < X ≤ 0

13

二、数的定点表示与浮点表示 在现实世界中,我们所遇到的数可能既有整数部分,

又有小数部分,这就存在一个如何表示小数点的问题,即如何确定小数点的位置。

根据小数点的位置是否固定,数的格式可分为: 定点表示 浮点表示其中,定点数又分为无符号定点数、带符号定点数。

对于数据表示,我们最关心两项指标: 第一,表示范围,即在正负两个方向上各能表示多大的数 第二,分辨率,也就是表示数的精细程度

14

1 、定点表示法——无符号定点数所谓无符号数定点数,是指整个机器字的二进制位全部用来表示数值位,没有符号位置;同时约定小数点在最低数位之后,而且不出现在数码序列中。例、 N1 = 01001 ,表示 9; N2 = 11001 ,表示 25。

字长为 n+1 位的无符号数 xn…x2x1x0 有以下特性: 典型值 真值 代码序列

最大值 2n+1-1 11…11

最小非零正数 1 00…01

最小值 0 00…00

无符号定点数值的表示范围为 :0~ 2n+1-1 ,分辨率为 1 。

15

无符号定点数

例、以 8 位无符号数为例,说明其最大值为( 28-1 )。

其它典型值,最小非零正数和零,可进行同样的分析。

16

2 、定点表示法——带符号定点整数 带符号定点整数是纯整数,它约定机器字的最高位为

符号位,小数点在最低数位之后、且不出现在数码序列中,带符号定点整数可以是原码表示或补码表示。

格式为:

以下分原码和补码进行讨论。

xn xn-1 xn-2 …… x2 x1 x0

符号位 数值位

小数点

17

假设:带符号的定点整数代码序列为 xn…x2x1x0 ,约定xn 为符号位,小数点在最低位之后。其典型值如下:

典型值 真值 代码序列

原码

绝对值最大负数 -( 2n-1) 11…11

绝对值最小负数 -1 10…01

最小非零正数 +1 00...01

最大正数 2n-1 01…11

补码

绝对值最大负数 -2n 10…00

绝对值最小负数 -1 11…11

最小非零正数 +1 00…01

最大正数 2n-1 01…11

18

现以 8 位原码为例,说明带符号定点整数的绝对值最大负数 - ( 27-1 )、最大正数( 27-1 )。

得到结论:(注意,序列下标和权值的指数一致) 原码定点整数表示范围: - ( 2n-1 ) ~( 2n-1 ) 补码定点整数表示范围: -2n ~( 2n-1 ) 原码、补码定点整数分辨率: 1

19

3 、定点表示法——带符号定点小数 带符号定点小数是纯小数,它约定机器字的最高位为

符号位,小数点在符号位之后、最高数值位之前、且不出现在数码序列中 ,带符号定点小数可以是原码表示或补码表示。

格式:

以下分原码和补码进行讨论。

x0 x1 x2 …… xn-2 xn-1 xn

符号位 数值位

小数点

20

假设:带符号的定点小数代码为 x0.x1x2…xn ,约定 x0 为符号位 ,小数点在符号位和最高数位之间 . 其典型值如下:

典型值 真值 代码序列

原码

绝对值最大负数 -( 1-2-n) 1.1…11

绝对值最小负数 -2-n 1.0…01

最小非零正数 +2-n 0.0...01

最大正数 1-2-n 0.1…11

补码

绝对值最大负数 -1 1.0…00

绝对值最小负数 -2-n 1.1…11

最小非零正数 +2-n 0.0…01

最大正数 1-2-n 0.1…11

21

现以 8 位原码为例,说明带符号定点小数的绝对值最大负数 - ( 1-2-7 )、最大正数( 1-2-7 )。

由此得到:(注意:序列下标和权值的指数一致) 原码定点小数表示范围: - ( 1-2-n ) ~( 1-2-n ) 补码定点小数范围: -1 ~( 1-2-n ) 原码、补码定点小数分辨率: 2-n

22

4、浮点数的表示方法 把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,相当于小数点的位置随数的比例因子不同在一定范围内可自由浮动,所以把这种表示方式称为浮点表示法。

任意一个二进制数可以写成:N=2e×M

M 称为浮点数的尾数,纯小数表示,基数为 2 ; e 为浮点数的指数 , 也叫阶码,整数表示,底数为 2 。 浮点数在机器中由阶码和尾数来表示。尾数部分给出

浮点数有效数字的数位,决定浮点数的精度;阶码指明小数点在数据中的位置,决定浮点数的表示范围。

23

( 1 )浮点数的格式 浮点数的表示格式

Es E1E2…Em Ms M1M2…Mn

阶符阶码

数符尾数

数符决定浮点数的正负;阶符仅决定阶码本身的正负 阶码通常使用移码表示,移码是计算机中又一种机器

数的编码方式。下面先介绍移码。

整数 小数

24

( 2 )移码表示法 移码通常用来表示浮点数的阶码,由真值加一个固定的常

数生成,这个固定的常数称为偏移量。 设定点整数移码的形式为 xm…x2x1 x0 ,则移码定义为: [x] 移 =2m+x -2m≤x < 2m

[x] 移是机器数, x是真值, 2m是一个固定的偏移量,它也是 xm 的位权,移码共有m+1 位。

例、某浮点数阶码 8 位,含一位符号位,移码表示。当阶码 x = -0111 1111 ,则:

[x] 移 = 27 - 0111 1111 = 0000 0001

25

移码的特点

最高位为 0 表示负数,为 1 表示正数。 移码全 0 时真值最小,全 1 时真值最大。 0 的移码只有一个, [±0] 移 =100…0

同一数值的移码和补码,数位相同,而符号相反。 便于阶码大小的比较,便于对阶操作,有利于简化

机器中的判零电路。

26

( 3 )规格化 为了提高浮点数的表示精度,当尾数不为 0 时,尾数域

的最高数位必须是一个有效值。如果最高数位不是有效值,则通过尾数移位并修改阶码的办法,使其变成有效值,这称为浮点数的规格化。

对规格化的浮点数规定如下: 如果尾数是原码表示,尾数的最高有效位一定为 1 。

如, 0.1101×2-2 为规格化的浮点数表示, 0.01101×2-1 则不是。 如果尾数用补码表示,尾数的最高有效位一定与符号位相反。

如: 0.1x…x 和 1.0xx…x 是规格化的补码表示。 -1/2 是个特殊的浮点数,无规格化表示,所以不在浮点数规格

化表示的范围内。

27

( 4)表示范围和精度 设浮点数的阶码m+1 位,含一位阶符,补码表示,以

2 为底;尾数 n+1 位,含一位数符,补码表示,规格化。其典型值如下:

典型值 浮点数代码 真值绝对值最大负数 01…1, 1.00…0 -1×22m-1

绝对值最小负数 10…0, 1.01…1 -(2-1+2-n) ×2-2m

非零最小正数 10…0, 0.10…0 2-1×2-2m

最大正数 01…1, 0.1…1 (1-2-n) ×22m-1

浮点数的表示范围: -1×22m

-1~(1-2-n) ×22m-1

浮点数的分辨率: 2-1×2-2m (非零最小正数就是分辨率)

28

( 5 )真值与浮点数之间的转换

例 1 、某浮点数字长 32 位;阶码 8 位,含一位阶符,补码表示,以 2 为底;尾数 24 位,含一位数符,补码表示,规格化。若浮点数代码为 (A3680000)16 ,求其真值。

解: (A3680000)16 = (10100011 , 011010000000…0)2

E = -(1011101)2 = -(93)10

M = (0.11010…0)2 = (0.8125)10

N = 2-93×0.8125

29

真值与浮点数之间的转换

例 2 、按上题格式将 -(1011.11010…0)2写成浮点数代码。

解: N = -(1011.11010…0)2 = -(0.101111010…0)2×24

E = (4)10 = (0000 0100)2

M 补 = (1.010000110…0)2

浮点数代码 = (0000 0100 , 1010 0001 10…0)2

= (04A18000)16

30

( 6 ) IEEE754标准浮点数格式

上面讨论的是一种原理性浮点数格式,实用的机器浮点数格式与此有一些差异。下面简要介绍当前微机中使用较多的 IEEE754标准浮点数格式。

类型 数符 阶码 尾数 总位数短实数 1 8 23 32

长实数 1 11 52 64

临时实数 1 15 64 80

31

32 位 IEEE754标准下的浮点数 格式: S(31) E(30-23) M(22-0)

由数符 S 、阶码 E 、尾数 M 三部分组成 ,指数以 2 为底、尾数以 2为基数

符号位 S 占 1 位,安排在最高位, S=0 表示正数, S=1 表示负数。 阶码 E 占 8 位,移码表示,偏移量为 +127 。( 27=128 ≠ 127 ?) 尾数 M 占低 23 位,用原码表示,小数点在尾数域的最前面。 754标准规定:尾数域表示的值是 1.M 。由于最高有效位总是 1 ,可

以将 1 隐藏在小数点左边,可不予存储,尾数实际 24 位。于是,一个 32 位的浮点数的实际真值为:

X=(-1)s×(1.M)×2E-127 ,其中 e=E-127

754标准还规定:当阶码 E=0…0且尾数 M=0…0 时,表示的真值 x=±0 ;当阶码 E=1…1且尾数 M=0…0 时,表示的真值 x=±∞ 。

32

IEEE754 的 32 位浮点数举例

例:将十进制数 28.75 转换为 32 位 IEEE754短浮点数。

解: (28.75)10=(11100.11)2=1.110011×24 , E=127+4=131=(10000011)2

M= (1100 1100 0000 0000 0000 000)2

IEEE短浮点数编码为: 0 , 10000011 , 1100 1100 0000 0000 0000 000

33

例题一以定点整数为例,用数轴形式说明原码、反码、补码的表示范围。解:原码、反码、补码分别示于下图。与原码、反码不同,补码表 示中“ 0” 只用一种形式,且表示负数时可以到 -2n 。

34

例题二 将十进制真值 x ( -127 , -1 , 0 , +1 , +127 )列表

表示成二进制数及原码、反码、补码、移码 (+128) 。 真值X(10)

真值X(2)

[X] 原 [X] 反 [X] 补 [X] 移

-127 -01111111 11111111 10000000 10000001 00000001

-1 -00000001 10000001 11111110 11111111 01111111

0 0000000010000000 11111111

00000000 1000000000000000 00000000

+1 +00000001 00000001 00000001 00000001 10000001

+127 +01111111 01111111 01111111 01111111 11111111

35

C、非数值数据的表示现代计算机不仅处理数值领域的问题,而且处理大量非数值领域的问题,包括字符、字符串、图形符号和汉字等各种数据,它们是用来表示文字语言、逻辑语言等信息的。

用的最多、也是为大家所熟知的是美国国家信息交换标准码—— ASCII 码以及我们使用的汉字。

36

1 、 ASCII 码 国际上广泛采用美国信息交换标准码,即 ASCII码。 ASCII码是集输入码、内部码、交换码于一体的一种

非常通用的编码。

特点:编码简单。

37

ASCII 码

1 、 10 个十进制数

2 、 26个英文字母

3 、 34个专用符号

4、 32 个控制字符

共计 128 个,其中有 95个可打印。

1 、 7位二进制表示一个字符。2 、排列顺序: b6b5b4b3b2b1b0

3 、 b7 为 0 ,表中未给出表示。

1

2

38

2 、汉字的表示 汉字的输入码

区位码:用数字串代表一个汉字。区位码是将国家标准局公布的 6763个汉字分 94 个区,每个区分 94 个位 ( 汉字 ) ,把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。区码和位码各两位十进制数。

拼音码:以汉语拼音为基础的输入方法。 字型编码:用汉字的形状来进行编码,例如五笔字型。

汉字内码 汉字内码是用于汉字信息处理、存储、交换、检索等操作的机内代码。

这种码具有唯一性。 国标码是由国家标准局公布的汉字交换码,主要用于信息交换。

汉字字模码 用点阵表示的汉字字型码,用于汉字的输出。

39

汉字的表示(续)

字模码是用点阵表示的汉字字型码,是汉字的输出形式,用于输出。

字模码占用的存储空间也很大。只有显示或打印时才找出来使用。

有 16×16点阵、 24×24点阵、 32×32 点阵,甚至更高。

40

D 、十进制数编码 用 4 位二进制数来表示一个十进制数位,称为二进制

编码的十进制数,也称为 BCD 码。

4 位二进制数可以组合出 16 种代码,只要其中 10 个代码表示 0~ 9 十个数码,其余的 6 个为冗余代码。

BCD 编码既具有二进制的形式,又保持了十进制数的特点。

41

常见的 BCD 编码 8421 码( NBCD 码), 4

位二进制代码位权从高到低为 8 、 4、 2 、 1 。特点:⑴ 有权码;⑵ 简单直观;⑶ 1010~ 1111 为非法码。

2421 码各位权值从高到低为 2 、 4、 2 、 1 。特点:⑴ 它是有权码;⑵ 对 9的自补码(取反得补码);⑶ 0101~ 1010 为非法码。

余 3 码在 8421 码的基础上加 0011 形成,多余 3 ,故称余 3 码。特点:⑴ 它是一种无权码;⑵ 是一种对 9的自补码;⑶ 0000~ 0010 、1101~ 1111 为非法码。