450 likes | 668 Views
第二章 数据的机器表示. 主要内容: 真值、机器数的概念 原码、补码、反码、真值,及其相互转换。 定点数与浮点数的表示范围。 字符编码与汉字编码。. A 、 数据的分类. 数据表示的分类: 数值数据表示 无符号数 带符号数 原码、补码、反码、移码 定点、浮点 非数值数据表示 字符数据和字符串 汉字数据 十进制数和数串(自学). B 、 数值型数据的表示方法. 一个预备知识 二进制数 B 、八进制数 Q 十进制数 D (可省略)、十六进制数 H 两个术语定义
E N D
第二章 数据的机器表示 • 主要内容: • 真值、机器数的概念 原码、补码、反码、真值,及其相互转换。 • 定点数与浮点数的表示范围。 • 字符编码与汉字编码。
A、数据的分类 • 数据表示的分类: • 数值数据表示 • 无符号数 • 带符号数 • 原码、补码、反码、移码 • 定点、浮点 • 非数值数据表示 • 字符数据和字符串 • 汉字数据 • 十进制数和数串(自学)
B、数值型数据的表示方法 • 一个预备知识 • 二进制数B、八进制数Q • 十进制数D(可省略)、十六进制数H • 两个术语定义 • 真值:在现实生活中,用正号、负号加绝对值表示数值的数称为真值,如123、-128等。 • 机器数:在计算机内部使用的、连同符号一起数码化了的数,称为机器数。 • 要做三件事 • 区分数据的正负、选择数值的码制、确定小数点的位置。
一、带符号数的表示方法 • 带符号机器数主要有3种编码方式: • 原码 • 补码 • 反码 • 带符号数最常用的编码方式有2种: • 原码 • 补码
8位 机器字 1、原码表示 • 原码表示法规定:一个机器字中,最高位为符号位,符号位为0表示正数,符号位为1表示负数,数值部分与真值相同。 • 若定点小数的原码形式为 x0.x1x2…xn,则原码表示的定义: [X]原= 其中,[X]原是机器数,X是真值。 X 0 ≤X<1 1 – X = 1 + |X| -1<X≤0 • 例如,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
8位 机器字 原码表示(续) • 若定点整数的原码形式为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位 机器字 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
X 0 ≤X<2n 2n+1 + X = 2n+1 - |X| - 2n≤ X< 0 (mod 2n+1) 8位 机器字 补码表示(续) • 若定点整数的补码形式为xn…x2x1x0,定点整数的补码定义: [x]补= • 例如, x = +1011,则[x]补= 00001011 x = -1011,则[x]补= 11110101 • 由真值转换为补码时,很少用补码定义式计算,通常把真值先转换为原码,再由原码转换为补码。事实上,按照对补码定义式的理解,有如下简便的转换方法。
由真值、原码转换为补码 • 负数原码转换为补码的方法之二:符号位保持1不变,在数值位中从低位向高位找1,第一个1及其右边的0保持不变,数值位的其余部分求反。 如: [x]原 = 1.1010 不变 求反 不变 [x]补 = 1. 01 10 • 正数的补码表示与原码相同。 如:[x]原=0.1010 ,[x]补=0.1010 • 负数原码转换为补码的方法之一:符号位保持1不变,数值位按位求反,末位加1。 如: [x]原 = 1.1010 按位求反 1.0101 末位加1 + 1 [x]补 = 1. 0110 以上方法与通过补码定义式计算结果完全一致,但更为简便,是实现求补电路的重要依据,也是实现求补电路普遍采用的方法。
由补码表示转换为原码与真值 • 正数补码与原码相同,不需要转换。 • 负数补码转换为原码,可以采用上述方法,对补码再求补码,实现逆转换,即对补码再求补码结果为原码。 关于补码表示的结论: • 在补码表示中,仍以最高位作为符号位,0为正数、1为负数。补码的符号位是数值的一部分,可以和数值位一起参与运算,不需要单独处理。 • 数值0只有一种表示,无+0和-0之分,补码的负数域不含0。 • 负数补码和原码相比,多出了一个负数-1或-2n。以n+1位整数为例,原码绝对值最大的负数为-(2n-1),而补码绝对值最大的负数为-2n,其原因是在补码中0只占一个码点。 • 补码表示可以把减法转化为加法,用一套电路完成加法和减法.
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
反码表示(续) • 对于正数 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
二、数的定点表示与浮点表示 • 在现实世界中,我们所遇到的数可能既有整数部分,又有小数部分,这就存在一个如何表示小数点的问题,即如何确定小数点的位置。 • 根据小数点的位置是否固定,数的格式可分为: • 定点表示 • 浮点表示 其中,定点数又分为无符号定点数、带符号定点数。 • 对于数据表示,我们最关心两项指标: • 第一,表示范围,即在正负两个方向上各能表示多大的数 • 第二,分辨率,也就是表示数的精细程度
1、定点表示法——无符号定点数 所谓无符号数定点数,是指整个机器字的二进制位全部用来表示数值位,没有符号位置;同时约定小数点在最低数位之后,而且不出现在数码序列中。 例、N1 = 01001,表示9;N2 = 11001,表示25。 字长为n+1位的无符号数xn…x2x1x0有以下特性: 无符号定点数值的表示范围为:0~2n+1-1,分辨率为1。
无符号定点数 例、以8位无符号数为例,说明其最大值为(28-1)。 其它典型值,最小非零正数和零,可进行同样的分析。
xn xn-1 xn-2…… x2 x1 x0 小数点 符号位 数值位 2、定点表示法——带符号定点整数 • 带符号定点整数是纯整数,它约定机器字的最高位为符号位,小数点在最低数位之后、且不出现在数码序列中,带符号定点整数可以是原码表示或补码表示。 • 格式为: • 以下分原码和补码进行讨论。
假设:带符号的定点整数代码序列为xn…x2x1x0,约定xn为符号位,小数点在最低位之后。其典型值如下:假设:带符号的定点整数代码序列为xn…x2x1x0,约定xn为符号位,小数点在最低位之后。其典型值如下:
现以8位原码为例,说明带符号定点整数的绝对值最大负数-(27-1)、最大正数(27-1)。现以8位原码为例,说明带符号定点整数的绝对值最大负数-(27-1)、最大正数(27-1)。 得到结论:(注意,序列下标和权值的指数一致) • 原码定点整数表示范围:-(2n-1)~(2n-1) • 补码定点整数表示范围:-2n ~(2n-1) • 原码、补码定点整数分辨率:1
x0 x1 x2…… xn-2 xn-1 xn 小数点 数值位 符号位 3、定点表示法——带符号定点小数 • 带符号定点小数是纯小数,它约定机器字的最高位为符号位,小数点在符号位之后、最高数值位之前、且不出现在数码序列中,带符号定点小数可以是原码表示或补码表示。 • 格式: • 以下分原码和补码进行讨论。
假设:带符号的定点小数代码为x0.x1x2…xn,约定x0为符号位,小数点在符号位和最高数位之间.其典型值如下:假设:带符号的定点小数代码为x0.x1x2…xn,约定x0为符号位,小数点在符号位和最高数位之间.其典型值如下:
现以8位原码为例,说明带符号定点小数的绝对值最大负数-(1-2-7)、最大正数(1-2-7)。现以8位原码为例,说明带符号定点小数的绝对值最大负数-(1-2-7)、最大正数(1-2-7)。 • 由此得到:(注意:序列下标和权值的指数一致) • 原码定点小数表示范围:-(1-2-n)~(1-2-n) • 补码定点小数范围:-1 ~(1-2-n) • 原码、补码定点小数分辨率:2-n
4、浮点数的表示方法 • 把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,相当于小数点的位置随数的比例因子不同在一定范围内可自由浮动,所以把这种表示方式称为浮点表示法。 • 任意一个二进制数可以写成: N=2e×M M称为浮点数的尾数,纯小数表示,基数为2; e为浮点数的指数,也叫阶码,整数表示,底数为2。 • 浮点数在机器中由阶码和尾数来表示。尾数部分给出浮点数有效数字的数位,决定浮点数的精度;阶码指明小数点在数据中的位置,决定浮点数的表示范围。
Es E1E2…Em Ms M1M2…Mn 阶符 数符 阶码 尾数 (1)浮点数的格式 • 浮点数的表示格式 小数 整数 • 数符决定浮点数的正负;阶符仅决定阶码本身的正负 • 阶码通常使用移码表示,移码是计算机中又一种机器数的编码方式。下面先介绍移码。
(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
移码的特点 • 最高位为0表示负数,为1表示正数。 • 移码全0时真值最小,全1时真值最大。 • 0的移码只有一个,[±0]移=100…0 • 同一数值的移码和补码,数位相同,而符号相反。 • 便于阶码大小的比较,便于对阶操作,有利于简化机器中的判零电路。
(3)规格化 • 为了提高浮点数的表示精度,当尾数不为0时,尾数域的最高数位必须是一个有效值。如果最高数位不是有效值,则通过尾数移位并修改阶码的办法,使其变成有效值,这称为浮点数的规格化。 • 对规格化的浮点数规定如下: • 如果尾数是原码表示,尾数的最高有效位一定为1。 如,0.1101×2-2为规格化的浮点数表示, 0.01101×2-1则不是。 • 如果尾数用补码表示,尾数的最高有效位一定与符号位相反。如:0.1x…x和1.0xx…x是规格化的补码表示。 • -1/2是个特殊的浮点数,无规格化表示,所以不在浮点数规格化表示的范围内。
(4)表示范围和精度 • 设浮点数的阶码m+1位,含一位阶符,补码表示,以2为底;尾数n+1位,含一位数符,补码表示,规格化。其典型值如下: • 浮点数的表示范围:-1×22m-1~(1-2-n) ×22m-1 浮点数的分辨率:2-1×2-2m(非零最小正数就是分辨率)
(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
真值与浮点数之间的转换 • 例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
(6)IEEE754标准浮点数格式 • 上面讨论的是一种原理性浮点数格式,实用的机器浮点数格式与此有一些差异。下面简要介绍当前微机中使用较多的IEEE754标准浮点数格式。
S(31) E(30-23) M(22-0) 32位IEEE754标准下的浮点数 • 格式: 由数符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=±∞。
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
例题一 以定点整数为例,用数轴形式说明原码、反码、补码的表示范围。 解:原码、反码、补码分别示于下图。与原码、反码不同,补码表 示中“0”只用一种形式,且表示负数时可以到-2n。
例题二 • 将十进制真值x(-127,-1,0,+1,+127)列表表示成二进制数及原码、反码、补码、移码(+128)。
C、非数值数据的表示 现代计算机不仅处理数值领域的问题,而且处理大量非数值领域的问题,包括字符、字符串、图形符号和汉字等各种数据,它们是用来表示文字语言、逻辑语言等信息的。 用的最多、也是为大家所熟知的是美国国家信息交换标准码——ASCII码以及我们使用的汉字。
1、ASCII码 • 国际上广泛采用美国信息交换标准码,即ASCII码。 • ASCII码是集输入码、内部码、交换码于一体的一种非常通用的编码。 • 特点:编码简单。
ASCII码 1、7位二进制表示一个字符。 2、排列顺序:b6b5b4b3b2b1b0 3、b7为0,表中未给出表示。 2 1 1、10个十进制数 2、26个英文字母 3、34个专用符号 4、32个控制字符 共计128个,其中 有95个可打印。
2、汉字的表示 • 汉字的输入码 • 区位码:用数字串代表一个汉字。区位码是将国家标准局公布的6763个汉字分94个区,每个区分94个位(汉字),把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。区码和位码各两位十进制数。 • 拼音码:以汉语拼音为基础的输入方法。 • 字型编码:用汉字的形状来进行编码,例如五笔字型。 • 汉字内码 • 汉字内码是用于汉字信息处理、存储、交换、检索等操作的机内代码。这种码具有唯一性。 • 国标码是由国家标准局公布的汉字交换码,主要用于信息交换。 • 汉字字模码 • 用点阵表示的汉字字型码,用于汉字的输出。
汉字的表示(续) 字模码是用点阵表示的汉字字型码,是汉字的输出形式,用于输出。 字模码占用的存储空间也很大。只有显示或打印时才找出来使用。 有16×16点阵、24×24点阵、32×32点阵,甚至更高。
D、十进制数编码 • 用4位二进制数来表示一个十进制数位,称为二进制编码的十进制数,也称为BCD码。 • 4位二进制数可以组合出16种代码,只要其中10个代码表示0~9十个数码,其余的6个为冗余代码。 • BCD编码既具有二进制的形式,又保持了十进制数的特点。
常见的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为非法码。