1
第 2 章 数据信息的表示
计算机内部流动的信息可以分为两大类:一类为数据信息,另一类为控制信息。数据信息是计
算机加工处理的对象,而控制信息则控制数据信息的加工处理。数据信息的表示将直接影响到运算
器的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
,最终还将影响到计算机的结构和性能。本章讨论数据信息的表示。
2.1 数据表示的目的及设计数据格式应考虑的因素
数据表示的作用就是将数据按照某种方式组织,以便机器硬件能直接识别和引用。由于数字计
算机中的信息都是由逻辑电路进行处理,因此,应用中的任何数据要能直接被计算机识别和引用,
必须首先表示成二进制。在此基础上,数据表示还要研究如何为应用提供更灵活和有效的支持。
在选择计算机的数据表示时,一般需要综合考虑以下几方面的因素:
1.数据类型
显然,计算机所支持的数据类型应该能满足应用对数据类型的要求。从大类上分,数据类型包
括数值数据和非数值数据。其中数值数据用于科学计算,常见的数值数据类型包括小数、整数、实
数等。非数值数据又称符号数据,一般用来表示符号或文字,没有值的含义。如 ASCII 和汉字的表
示就属于非数值数据。
2.数据表示范围和精确度
计算机所支持的数据表示范围和精确度也应该能满足应用对数据范围和精确度的要求。计算机
所能表示数的范围和精确度与所采用的数据类型和字长有关。
3.存储和处理的代价
设计的数据格式要便于存储和处理。这不仅有利于降低数据存储和处理过程中对硬件资源的消
耗,而且还能提高数据处理的速度。从这一点上看,在设计数据格式的时候,往往还要综合考虑数
据表示和数据的处理代价,要使设计出的数据格式易于表示、易于设计处理数据的硬件,如运算器
等。
4.软件的可移植性
设计数据格式时,要充分考虑软件移植。目前,计算机硬件的升级速度很快,从保护用户软件
投资的角度看,应使设计的数据格式在满足应用需求的前提下,符合相应的规范,从而便于软件的
移植。
2.2 数值数据的表示
数值数据有确定的值,它表示数的大小,能在数轴上找到它们的位置。非数值数据一般用来表
示符号和文字,它没有值的含义。本节仅讨论计算机中数值数据的表示方法。
2.2.1 数的机器码表示
二进制具有运算简单、便于物理实现、节省设备等优点,所以被计算机采用。二进制数与十进
制数一样有正负之分。在计算机中,常采用数的符号和数值一起编码的方法来表示数据。常用的有
原码、补码、反码和移码等几种表示方法,这几种表示法都将数据的符号数码化。对于原码、反码
和补码而言,数据的最高位(最左位)为“0”时,表示该数为正数;数据的最高位(最左位)为“1”
时,表示该数为负数。对于移码,则正好相反,数据的最高位为“0”时,表示该数为负数;数据的
最高位为“1”时,表示该数为正数。为了区分一般书写时表示的数和机器中编码表示的数,我们称
2
前者为真值,后者为机器数。
下面将分别讨论原码、补码、反码和移码的表示方法及特点。
1.原码表示
原码表示法是一种直观的数据表示方法,除符号被数值化以外,数值部分仍保留着其真值的特
征。
若定点小数 x 的原码形式为 x0.x1x2…xn,其中 x0 为符号位,则小数原码的定义是:
x 0≤x<1
[x]原=
1-x =1+|x| -1<x≤0
若定点整数 x 的原码形式为 x0x1x2…xn,其中 x0 为符号位,则整数原码的定义是:
x 0≤x<2n
[x]原=
2n -x =2n+|x| -2n<x≤0
式中,[x]原是机器数,x 为真值。
表 2.1 描述了原码数据表示方法。
表 2.1 原码的表示方法
真 值 原 码
正数 X =十 0.x1x2…xn [x]原=0.x1x2…xn
负数 X =-0.x1x2…xn [x]原=1.x1x2…xn
正数 X =十 x1x2…xn [x]原=0x1x2…xn
负数 X =-x1x2…xn [x]原=1x1x2…xn
例 2.1 x= +0.1101 则 [x]原 =0.1101
x= -0.1101 则 [x]原 =1.1101
x= +1101 则 [x]原 =01101
x= -1101 则 [x]原 =11101
原码表示法有两个特点:
(1)零的表示有“+0”和“-0”之分,其两种原码表示形式分别为
[+0]原 = 0.00…0
[-0]原 = 1.00…0
(2)符号位 x0 的取值由数的正、负决定:
0 0≤x<1
x0=
1 -1<x≤0
即当真值 x 为正数时,符号位 x0 取值为 0;当 x 为负数时,符号位 x0 取值为 1。这一特征与后
面要讨论的补码表示法和反码表示法是一致的。
原码表示法的优点是直观,在数的真值和它的原码表示之间的对应关系简单,相互转换容易。
缺点是加减运算复杂,两个数求和时,如果符号相同,则数值部分相加;如果符号相异,则数值部分
相减。相减时,要先比较两个运算数绝对值的大小,然后做减法,最后结果的符号位同绝对值大的
那个数的符号位。显然,利用原码实现加减法运算控制复杂,且不利于运算器设计的简化。
2.反码(One,s complement)表示法
3
反码表示法中,符号的表示法与原码相同。正数的反码与正数的原码形式相同。负数的反码,
符号位为 1,数值部分通过将负数原码的数值部分各位取反得到。
若定点小数 x 的反码形式为 x0.x1x2…xn,其中 x0为符号位,则反码表示的定义是
x 0 ≤ x<1
[x]反=
(2-2-n)+ x -1< x≤ 0
其中 n 表示小数点后的位数。
若定点整数 x 的反码形式为 x0x1x2…xn, 其中 x0为符号位,对应的反码定义为:
x 0 ≤ x<2 n
[x]补 = ( mod 2 n+1 -1)
(2 n+1 -1)+ x −2 n <x≤0
式中 n 表示整数数值位的位数。
表 2.2 描述了反码数据表示方法。
表 2.2 反码的表示方法
真 值 反 码
正数 x =+0. x1x2…xn [x]反= 0. x1x2…xn
负数 x =-0. x1x2…xn [x]反 = 1.x1x2…xn
正数 X =十 x1x2…xn [x]原=0x1x2…xn
负数 X =-x1x2…xn [x]原=1x1x2…xn
例 2.2 x =+ 0.0101 则 [x]反 = 0.0101
x = - 0.0101 则 [x]反 = 1.1010
例 2.3 x = 10101 则 [x]反 = 010101
x = −10101 则 [x]反 = 26-1-10101 = 101010
对于 0,反码有“+0”和“-0”之分:
[+0 ]反= 0.00…0
[− 0]反 = 1.11…l
3.补码(two,s complement)表示
1)补码的引进和定义
统计表明,加、减运算占运算指令的比例很高,因此,能否方便地进行正、负数加、减运算,
直接关系到计算机的运行效率。通过前面对原码特点的
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
可知,采用原码数据表示不利于运算器
设计的优化。引入补码数据表示的目的就是希望能方便带符号数的加、减运算。
补码数据表示建立在”模”的概念基础上,要理解补码数据表示,先要理解模的概念。在《数字
逻辑》课程中,我们把计数器的循环状态数称为计数器的模。如某计数器有 12 个计数状态(从状态 0
到状态 11),我们就称该计数器为模 12 的计数器(即模为最大状态加 1)。对于模 12 的加法计数器而
言,若当前状态为 11,则再加一个数后计数器就循环到状态 0。因此,“模”是指一个系统的量程,
按模运算是指运算结果超过模时将被丢弃。当模为整数时,按模运算也可理解成除以模求余数的过
程。常用符号“mod”表示按模运算。
有了模的概念,接下来我们仍以具有 12 个整点状态的钟表为例说明补码的概念。假设现在的标
4
准时间是 6点整,某钟表的时间指示为 11 点整,为了校准时间,可以采用两种方法:-是将时针逆
时针方向拨 5 小时;二是将时针顺时针方向拨 7 个小时。这两种方法都可以将该钟表的时间校准。
将逆时针方向拨动时针类似于减法操作,顺时针方向拨动时针类似于加法操作,则上述两种校准时
钟的方法可用下列两个算式表示:
6 = (11 – 5 ) mod 12
6 = (11 + 7) mod 12
上面校准钟表的例子中可以看到,在模为 12 的前提下,对同一个 11 数执行减 5 和加 7 得到的
结果相同。我们将这种关系记作:
-5=7 (mod 12)
上述表示的含义是以 12 为模时-5 的补码为 7,或者说-5 与 7 对模 12 互补。
按照同样的规律,我们能求出在模为 12 时任一个负数的补码,如-6 的补码是+6、-3 的补码是
+9 等等。
下面我们接着研究正数的补码,仍以校准钟表为例,任何情况下,将时针顺时针方向拨 12 个小
时后又回到原来的时间,这种关系可记作:(假定原来的时间是 6 点整):
6 = 12 (mod 12)
若以 16 为模,同理有:
-3=13 (mod 16)
0=16 (mod 16)
5=5 (mod 16)
18=2 (mod 16)
可见:
(1)负数的补码可以用模加上该负数获得;
(2)一个小于模的正数相对某模数的补码就是该正数本身;
(3)大于模的正数,在模的意义下,该正数与它减模后得到的数相等。
通过前面的分析可知:
(1)在模已知的情况下可以很方便求出任何一个数的补码;
(2)由于负数可用对应的补码取代,因此,减法运算可用加法运算实现,从而简化运算器的设计。
2)二进制数补码的求法
存在多种求补码的方法:
(1) 根据补码的定义求补码
即根据 [X]补=模+X (mod 模) 来求 X 的补码,其中 X 可正可负。利用这种方法需要事先求出
模的值。
若小数 x 的补充码为 x0.x1x2…xn,其中 x0为符号位,模为 2,对应的补码定义为:
x 0 ≤ x<1
[x]补 = ( mod 2 )
2 + x =2 -|x| −1 ≤x<0
式中,[x]补表示数 x 的补码,即机器数,x 为真值。
若定点整数 x 的补充码为 x0x1x2…xn, 其中 x0为符号位,模为 2n+1,对应的补码定义为:
5
x 0 ≤ x<2 n
[x]补 = ( mod 2 n+1 )
2 n+1 + x −2 n ≤x<0
式中 n 表示数值位的位数。
说明:其实小补码表示中的模也可和定点整数一样用 2n+1表示,因为定点小数的整数位为 0,因
此 2n+1= 20+1=2
例 2.4 设 x = 0.0101,则
[x]补=2 + 0.0101=0.0101 (mod 2)
例 2.5 设 x=-0.0101,则
[x]补 = 2 +(-0.0101)= 1.1011 (mod 2)
例 2.6 设 x=-10101,则
[x]补 = 26 +(-10101)= 101011 (mod 64 )
对于 0,在补码定义下只有一种表示形式,即:
[+0]补 = [-0]补 = 0.00…0
从上述求补码的过程中不难发现,求负数的补码时,要从模中减去负数的绝对值,需要执行一
次减法运算,增加了求补的开销。
(2)利用反码求补码
通过比较负数求反码和补码的公式不难发现二者之间具有如下关系:
[x]补= [x]反+ 2 —n
这个公式说明,求一个负数的补码,可以在其反码的基础上通过在最低位加 1 的方式得到。
例 2.7 设 x=-0.0101,则
[x]补 =[x]反 + 0.0001
= 1.1010 + 0.0001 = 1.1011
设 x=-10101,则
[x]补 =[x]反 + 1
= 101010 + 1 =101011
由于数值位各位取反的逻辑实现很方便(用反相器就能实现),从而就避免了利用补码定义求补
码做减法带来的麻烦,但该方法仍然需要执行一次加法运算。
(3)利用扫描方法求补码
扫描方法可以很方便地将一个负数从真值或原码表示直接变换成补码,具体方法是对数值位按
照从低位到高位的顺序(假设低位在数的尾部)扫描,尾数第一个 1 及其右边的 0 保持不变,其余各
位求反,最后再将符号位置 1。
例 2.8 设 x=-1010100, 利用扫描规则可得求出 [X]补= 10101100。
扫描方法既避免了利用补码定义求补所需要的减法运算,又避免了利用反码求补所需的加 1运算,
是计算机系统中设计实际求补电路的常用方法。
从上面的讨论不难发现:
(1)正数的原码、补码和反码有相同的形式。即:
[x]原=[x]反=[x]补= x
(2)负数的原码,将符号位置 1、数值部分保持真值的数值位不变;
6
(3)负数的补码和反码符号位均为 1。反码的数值部分可通过将原码的数值各位取反获得;可以
采用多种方法求一个负数的补码。
综上所述,求与真值相应的机器数,可不按机器数的数学定义去求,只要掌握上面的规律就可
以方便地将真值转换成机器数。也可以方便地从机器数反推出其真值。
例 2.9 设 x = 0.101101,求 x 的原码、反码和补码。
则 [x]原 = 0.101101 [x]反 = 0.101101 [x]补= 0.101101
例 2.10 设 x = 一 0.101101,求 x 的原码、反码和补码。
则 [x]原 = 1.101101 [x]反 =1.010010 [x]补= 1.010011
将机器数转换成真值是将真值转换成机器数的逆过程。
例 2.11 将下列各数转换成真值。
[x]原 = 0.101110 则 x =0.101110
[x]原 = 1.101010 则 x=- 0.101010
[x]反 = 1.101010 则 x=- 0.010101
[x]原 = 0.110110 则 x=0.110110
[x]补 = 0.110110 则 x=0.110110
[x]补 = 1.110110 则 x=- 0.001010
4.移码表示
移码可通过真值 X 上加一个常数得到,这个常数也称为偏置值,增加常数的操作相当于 X 在数
轴上向正方向平移了一段距离,这就是称为“移码”的原因,移码也可称为增码。即:
[X]移= X + 偏置值
移码通常用于表示浮点数的阶码,整数表示。最常见的移码偏置值为 2n (n 为整数中不包含符号
位的整数位数)。
设 n 位整数的移码形式为 x0x1x2…xn,则移码的定义为:
[x]移=2n+x -2 n ≤x<2 n
若阶码数值部分为 7 位,x表示真值,则:
[x]移=27+x -27≤x<27
例 2.12 设x=+1010110 ,则[x]移=27 +1010110 = 11010110 ;
设x=-1010110 ,则[x]移=27+x=27-1010110=00101010。
表 2.3 列出了在 8 位字长的情况下与真值对应的补码和移码之间的关系。
表 2.3 真值与补码和移码对照表
真值 (十进制) 二进制表示 补码表示 移码表示
-128 -10000000 10000000 00000000
-127 -1111111 10000001 00000001
... ... ... ...
-1 -0000001 11111111 01111111
0 0000000 00000000 10000000
1 0000001 00000001 10000001
... ... ... ...
126 1111110 01111110 11111110
127 1111111 01111111 11111111
对表 2.3 所示的移码表示而言,移码将真值 X 沿坐标轴正方向平移了 128 个单位。通过对比表
2.3 中同一数的补码和移码数据表示,不难发现移码数据表示具有下列特点:
⑴移码的符号位中“0”表示负数,“1”表示正数;
7
⑵同一数值的移码和补码除符号位相反外,其他各位相同;
⑶移码中 0 的表示也唯一,具体表示为 10000….0;
将移码作为浮点数(将在 2.2.3 节详细介绍浮点数据表示)的阶码具有下列优点:
⑴移码通过偏移的方法把真值映射到正数域,这样可直接按无符号数规则比较两个移码表示数
据的大小,便于浮点数的比较。
⑵有利于简化”机器零”的判断。从表 2.3 可知,当移码的各位均为 0 时,对应的阶码值最小。此
时,当尾数为全 0,对应的就是机器零。
2.2.2 数的定点表示
定点表示法约定机器中所有数据的小数点位置固定,其中,将小数点的位置固定在数据的最高
数位之前(或符号位之后)的数据表示称为定点小数,而将小数点固定在最低数位之后的数据表示
称为后者为定点整数。另外,由于小数点位置固定,因而小数点可不必再用记号表示。
1.定点小数
设定点小数 x 的形式为 x=x 0. x 1 x 2…x n 则其在计算机中的表示形式如图 2.1 所示:
图 2.1 定点小数表示
符号位 x 0 用来表示数的正负,小数点的位置是约定的,机器中并不用器件去指示它。x l~x n是
数值的有效部分,也称为尾数,x 1为最高有效位。
2.定点整数
设定点整数 x 的形式为 x=x 0 x 1 x 2…x n 则其在计算机中的表示形式如图 2.2 所示:
图 2.2 定点整数表示
定点数能表示的数据范围与下列因素有关:
(1) 字长。一般而言,字长越长,表示的数据范围就越大;
(2) 所采用的机器数表示方法。通过前面对几种不同机器数的分析可知,补码和移码数据表示
所能表示的数据范围比原码和反码所能表示的数据范围要多一个数据单位。
3.定点数的数据表示范围
定点数的数据表示范围与字长及采用的机器数形式等因素有关,当字长为 n+1(包含一位符号位)
时,分别采用原码、反码、补码和移码数据表示时,对应的数据表示特征如表 2.4 所示。
表 2.4 原码、反码、补码和移码数据表示特征
定点小数 定点整数
原码 反码 补码 原码 反码 补码 移码
最大正数 0.111…1 0.111…1 0.111…1 0111…1 0111…1 0111…1 1111…1
x0 x1 x2 x3 xn-1 xn
符号位 小数点 数值部分
x0 x1 x2 x3 xn-1 xn
符号 数值部分 小数点
8
(1-2−n) (1-2−n) (1-2−n) (2−n -1) (2−n -1) (2−n -1) (2−n -1)
最小正数 0.000…01 (2−n)
0.000…01
(2−n)
0.000…01
(2−n)
0000…01
(1)
0000…01
(1)
0000…01
(1)
1000…01
(1)
0 0.000…00 1.000…00
0.000…00
1.111…11 0.000…00
0000…00
1000…00
0000…00
1111…11 0000…00 1000…00
最大负数 1.000…01 -2−n
1.111…10
-2−n
1.111…11
-2−n
1000…01
(-1)
1111…10
(-1)
1111…11
(-1)
0111…11
(-1)
最小负数 1.111…1 -(1-2−n)
1.000…0
-(1-2−n)
1.000…0
(-1)
1111…1
-(2−n -1)
1000…0
-(2−n -1)
1000…0
-(2−n )
0000…0
-(2−n )
2.2.3 浮点数据表示
浮点表示法是小数点在数据中不固定,即小数点在数中可以浮动的一种数据表示方法,它由阶
码和尾数两部分组成,其中阶码的位数决定数据的范围,尾数的位数决定数据的精确度。
1.浮点数据表示的一般格式
对任意一个二进制数 N 都可表示成:
N = 2E× M
其中,E 为数 N 的阶码(Exponent),M 称为数 N 的尾数(Mantissa)。浮点数一般格式如图 2.3
所示:
图 2.3 浮点数一般格式
其中,es 表示阶码的符号,e1~em为阶码的值;ms 表示尾数的符号(也决定整个数的正负),m1~
mn 构成尾数,尾数是小于 1 的数。
例如,将 x =2-01 ×(− 0.1110)写成机器表示形式。若用 8 位表示该数,且 E 占 3位,M 占 5
位(E 和 M 中各包含一位符号位)。则以原码形式表示的浮点数如图 2.4 所示:
图 2.4 浮点数原码表示
若以补码表示该数,则形式如图 2.5 所示:
图 2.5 浮点数补码表示
2.IEEE 浮点数据表示
在浮点数据表示中,不同机器可能选用不同基、不同的阶码及尾数的位数,从而导致不同机器
浮点数据表示的差异性较大,不利于软件的移植。为此,美国电气及电子工程师协会 IEEE 于 1985
年提出了浮点数
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
IEEE754,现在该浮点数标准已被主流计算机所采用。
1)32 位 IEEE754 单精度浮点数格式
IEEE754 浮点数据表示由符号位 S、阶码部分 E 和尾数部分 M 组成,具体形式如图 2.6 所示:
es e1 e2 e3 em ms m1 m2 mn
阶符 阶码 数符 尾数
1 0 1 1 1 1 1 0
1 1 1 1 0 0 1 0
9
图 2.6 IEEE754 浮点数据格式
其中 S 占 1 位,E 占 8 位,M 占 23 位。
浮点数格式的几点说明:
(1)关于阶码字段 E: 在 IEEE754 标准中,阶码部分采用偏移值为 127 的移码表示。
(2)关于尾数字段 M:在 IEEE754 标准中,约定小数点左边隐含一位 1,即尾数的实际有效位数
为 24 位,完整的尾数形式为 1.M,但在进行浮点数据表示时只保存 M。正是由于要将位数变成 1.M,
阶码的偏移值才为 127 而不是 128(即 27)。
与上述 IEEE754 格式相对应的浮点数的真值可表示为
N = (-1)S × 2 E-127 × 1.M
随 E 和 M 的取值不同,IEEE754 浮点数据表示具有不同的意义
(1)E=0 , M =0 :表示机器零;
(2)E=0 , M ≠0 :则 N = (-1)S × 2 -126 × 0.M. 表示一个非规格化的浮点数,非规格化的主要目的是
为了提高数据的精确度;
(3)1≤ E ≤ 254 :N = (-1)S × 2 E-127 × 1.M ,表示一个规格化的浮点数;
(4)E=255 , M =0 :表示一个无穷大的数,对应于 x / 0 (其中 x ≠0) ;
(5)E=255 , M ≠0 :N= NaN,即 N 是一个非数值,对应于 0 / 0。
2)IEEE754 32 位浮点数与对应真值之间的变换流程
IEEE754 32 位浮点数与对应真值之间的变换流程如图 2.7 所示。
图 2.7 IEEE754 32 位浮点数与对应真值之间的变换流程
例 2.13 将十进制数 20.59375 转换成 32 位 IEEE754 格式浮点数的二进制格式来存储
解:首先分别将整数和分数部分转换成二进制数:
20.59375=10100.10011
移动小数点,使其变成 1.M 的形式
10100.10011=1.010010011×24
于是得到:
S=0, e = 4,E= 100+01111111 =10000011,M = 010010011
最后得到 32 位浮点数的二进制存储格式为:
数符 阶 码 尾 数
S E M
将 N 变换成(-1)s × 2 e × 1.M
浮点数真值对应的十进制数 N
单精度 IEEE754
E = e + 01111111
从 32 位二进制串中分离出 S、E、M 保存 S、E、M
e = E − 01111111
将 S、e、M 代入(-1)s × 2 e × 1.M,并按权展开
10
0100 0001 1010 0100 1100 0000 0000 0000
= (41A4C000)16
例 2.14 若浮点数 N 的二进制存储格式为 (41360000)16,求此 IEEE754 格式 32 位浮点数的十进
制值。
解:将 16 进制数展开后,可得二制数格式为
0 100 0001 0011 0110 0000 0000 0000 0000
从 32 位二进制串中分离出 S、E、M:
S = 0 、E = 10000010、 M = 011 011
进一步计算可得:
e = E-01111111 =10000010-01111111= 00000011= (3)10
实际尾数 1.M =1.011 011=1.011011
于是有:
N = (-1)S×1.M×2e = (1.011011)×23
= +1011.011= (11.375)10
3)其它类型的 IEEE754 浮点数格式
除单精度 32 位数据格式外,IEEE754 还有另外三种类型:
(1)扩展单精度格式:S 占 1 位,E ≥ 11 位,M 占 31 位;
(2)双精度格式(64 位):S 占 1 位,E=11 位,M 占 52 位;
(3)扩展双精度格式:S 占 1 位,E ≥ 15 位,M ≥ 63 位。
3.浮点数的规格化
在浮点运算过程中,为了保证数据的精度,要求尾数的最高位为非 0 数码,即当尾数的值不为
零时,其绝对值应大于或等于(1/2)10,这是浮点数规格化的基本要求。因此,对于非规格化浮点数,
通过将尾数左移或右移,并修改阶码的值以满足规格化要求。
以补码表示为例,正数规格化后,尾数的形式为:
0.1× × … ×
负数规格化后,尾数的形式为:
1.0 × × … ×
记号“×”可任取 0 或 l。
正数规格化后,尾数最大值为 0.111…1;
尾数最小值为 0.100…0,即(1/2)≤m<1。
负数规格化后,尾数(补码表示)最大值为 1.011…1;
尾数最小值为 1.000…0,即−(l≤m<−(1/2)。
由于−1/2 的补码形式为 1.100…0,为了方便机器判别,故约定不将(−1/2)列入规格化数。
虽然浮点表示能扩大数据的表示范围,但因为机器字长是有限,所以它的表示范围仍然是有限
的。如果在运算过程中,出现超出机器所能表示范围的数据,这种现象称为溢出。下面以阶码 3 位
和尾数 5 位(各包含 1位符号位,且都以补码表示)为例,来讨论这个问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
。
11
0
2011×1.0000 2100×1.0111 2100×0.1000 2011×0.1111
图 2.8 规格化浮点数分布示意图。
图 2.8 给出了相应的补码规格化数的数值表示范围。图中“可表示的负数区域”和“可表示的
正数区域”及“0”,是机器可表示的数据区域;上溢区是数据绝对值太大,机器无法表示的区域;
下溢区是数据绝对值太小,机器无法表示的区域。如果运算结果落在上溢区,就产生了溢出错误,
使得结果不能被正确表示,此时,要停止机器运行,进行溢出处理。若运算结果落在下溢区,虽然也
不能正确表示结果,但由于产生下溢的数的绝对值很小,因此常作 0处理,并称作机器零。
所谓机器零是指如果一个浮点数的尾数全为 0,则不论其阶码为何值;或者一个浮点数的阶码小
于它能表示的最小负数,则不论其尾数为何值,计算机在处理它们时都把该浮点数作 0 处理。特别是
当浮点数的阶码采用移码表示、尾数采用补码数据表示时,如果阶码等于它能表示的最小负数(即为
2n 时,n为阶码的位数)且尾数为 0时,其阶码和尾数表现为全 0,从而有利于机器中判 0电路的设计与
简化。
一般来说,增加尾数的位数,将增加可表示区域数据点的密度,从而提高了数据的精度;增加
阶码的位数,能增大可表示的数据区域,并缩小不能表示的数据区域,扩大了数据的表示范围。但
是,在字长一定的情况下,增加数据表示范围将影响数据表示的精确度,反之亦然。
4.浮点数的表示范围和精度
数据的表示范围是指机器所能表示的一个数的最大值与最小值间的范围。数据的精度是指一个
数的有效位数,有效位数越多,精度越高。
设计算机字长为m+n位(含相应的符号位),当采用一般浮点数格式表示浮点数时,m和n分别表示
阶码和尾数的位数(各包含一位符号位),且假设阶码和尾数均采用补码数据表示,能表示的数据范
围如表 2.5 所示:
表 2.5 阶码和尾数均采用补码表示的浮点数表示范围
典型数据 机器数形式 真值
非规格化最小正数 10 00 000…01 +2-(n-1)×2-2(m-1)
规格化最小正数 10 00 010…00 +2-1×2-2(m-1)
最大正数 01 11 011…11 +(1-2-(n-1))×22(m-1)
非规格化最大负数 10 00 111…11 2-(n-1) ×22(m-1)
规格化最大负数 10 00 1 01…11 -(2-1+2-(n-1))×2-2(m-1)
最小负数 01 11 1 00…00 -1×2+2(m-1)
从表 2.5 可看出,当机器字长一定时,分给阶码的位数越多,尾数占用的位数就越少,则数的表
示范围越大。而尾数占用的位数减少,必然会减少数的有效数位,即影响数的精度。
IEEE 754 单精度浮点数能表示的数据特征如表 2.6 所示。
表 2.6 32 位 IEEE754 浮点数特征
指数的取值范围 -126 ~ 127
最小规格化数 2-126
最大规格化数 2128
最小非规格化数 2-149 ≈10-45
可表示十进制数范围 10-38 ~ 1038
可表示的正数区可表示的负数区
负上溢区 负下溢区 正下溢区 正上溢区
12
2.2.4 十进制数的二进制编码与运算
计算机中的数据只能是二进制数,而人们习惯使用的是十进制数。因此,输入到计算机中的十
进制数,需要转换成二进制数;数据输出时,应将二进制数转换成十进制数。这个转换工作,是机
器通过标准子程序实现的。两种进位制数间的转换依据是数的编码。
用二进制数码来表示十进制数,称为二进制编码的十进制数。十进制数有 0~9 这 10 个数码。
用二进制数表示时,必须用 4 位才能表示 10 个数码。但 4 位二进制数码共有 16 种不同组合,要从
这 16 种组合中选取 10 种来表示十进制数的 0~9 这 10 个数码。选取的方法有多种。下面介绍几种
常用的编码。
1. 有权码——8421 码
表示 1 位十进制数的二进制数码的每一位都有确定的权。此类码中有 8421 码、2421 码等。8421
码就是常用的一种,简称 BCD 码(Binary Coded Decimal)。各位的权值如下:
二进制数码 x3 x2 x1 x0
权值 23 22 21 20
8421 码是一种最简单的编码。它选取 4 位二进制数的前 10 个代码 0000~1001 分别对应表示十
进制数的 10 个数码,1010~1111 这 6 个编码未被选用,如表 2.7 所示。
对于 BCD 码,若按权求和,和数就等于该代码所对应的十进制数。
例如:0111=0×23+1×22+1×21+1×20=4+2+1=7。
这就是说,编码中的每位仍然保留着一般二进制数所具有的位权,而且 4 位代码从左到右的位
权依次是 8,4,2,1。8421 码就是因此而得名。如十进制数 63,用 8421 码表示为 0110 0011。
表 2.7 十进制数的 BCD 编码和余 3码
十进制数 有权的 8421 码 无权的余 3码
0 0000 0011
1 0001 0100
2 0010 0101
3 0011 0110
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100
未被
采用
的编
码
1010 0000
1011 0001
1100 0010
1101 1101
1110 1110
1111 1111
对 8421 码实现算术运算时,其结果要进行修正。加法运算修正的规则如下:
若两个 8421 码相加之和≤(9)10 则不需修正;
若两个 8421 码相加之和≥(10)10 则要进行加(6)10 修正,并向高位进位。
例 2.15 十进制运算: 2+4=6 7+8=15
8421 码运算: 0010 0111
13
+0100 + 1000
0110 1111 ≥(10)10
+ 0110 加(6)10 修正
10101 (1 5)10
2.无权码——余 3 码
用二进制码表示一个十进制数码时,它的各位都没有确定的权。此类码中有余 3 码、格雷码等。
余 3 码是常用的一种。它是从 4 位二进制数中顺序选取 0011~1100 这 10 个编码,分别对应表示十
进制数的 0~9 这 10 个代码,其它代码不用,如表 2.7 所示。
从表 2.7 中可以看到:余 3 码是在 8421 码的基础上,把每个代码加 0011 形成的。在这种编码
中,若将二进制代码按二进制数转换成十进制数,则每组代码的值比相应的十进制数多 3。
例如,表中的十进制数码 5,相应的二进制编码是 1000=23 = 8;又如十进制数码 6 相应的编
码是 1001=23+20=9。显然 8 比 5 多 3,9 比 6 多 3。因此,称这种编码为余 3 码。
余 3 码的运算规则:当两个余 3 码相加不产生进位时,从结果中减去 0011;若产生进位,则将
进位送入高位,本位加 0011。
例 2.16 (38)10+(29)10=(67)10
0110 1011 (38)10
+ 0101 1100 (29)10
1100 10111 低位产生进位
- 0011 + 0011 高位减 3,低位加 3
1001 1010 (67)10
2.3 非数值数据的表示法
非数值数据是一种没有数值大小之分的数据,也称字符数据,如符号和文字等。
2.3.1 字符的表示方法
国际上广泛采用美国国家信息交换标准代码,简称 ASCII 码(American Stdandard Code for
Information Interchange)表示字符。它选用了常用的 128 个符号,其中包括 33 个控制字符、10 个
十进制数码、52 个英文大写和小写字母、33 个专用符号。128 个字符分别由 128 个二进制数码串表
示。目前广泛采用键盘输入方式实现信息输入。当从键盘输入字符时,编码电路按字符键的要求给
出与字符相应的二进制数码串,然后送交机器处理。计算机输出处理结果时,则把二进制数码串按
同一标准转换成字符,由显示器显示或打印机打印出来。表2.8给出了不带校验位的 ASCII 字符代码。
128 个字符可以用 7 位二进制数对它们进行编码。即用 0000000~111ll11 共 128 种不同的数码
串分别表示 128 个字符。如果加上一个校验位,正好可用一个字节(8 位)表示一个字符。
从表 2.8 中看出:0~9这 10 个数字符号是从 0110000 开始的一个连续区域,大写英文字母是从
1000001 开始的一个连续区。在数码转换时,这一点是可以利用的。例如。将 5 转换成 ASCII 码时,
只需以 0110000 为基值加上 101 即可,而通过去掉十进制数据区域的 ASCII 码最高 3 位的方法,则
可以得到十进制数的 8421 码。
向高位进位
14
表 2.8 ASCII 码表
位 数
w7
w6
w5
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
w4 w3 w2 w1 0 1 2 3 4 5 6 7
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(NUL)
(SOH)
(STX)
(ETX)
(EOT)
(ENQ)(A
CK)(BE
L)
(BS)
(HT)
(LF)
(VT)
(FF)
(CR)
(SO)
(SI)
(DLE)
(DC1)(D
C2)(DC3
)
(DC4)
(NAK)(S
YN)
(ETB)
(CAN)
(EM)
(SUB)
(ESC)(
FS)
(GS)
(RS)
(US)
SP
!
”
#
$
%
&
‘
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
2.3.2 汉字编码
计算机要对汉字信息进行处理,首先要将汉字转换成计算机可以识别的二进制形式并输入到计
算机,这是由汉字输入码完成的;汉字输入到计算机后,还需要转换成内码才能被计算机处理,显
然,汉字内码也应该是二进制形式。如果需要显示和打印汉字,还要将汉字的内码转换成字形码。
下面将简要介绍汉字的输入码、机内码和字形码。
1.汉字输入码
用通用的西文键盘输入汉字,首先必须解决汉字的输入问题。汉字输入编码的研究是一个十分活
跃的领域。到目前为止,国内、外提出的编码方法有几百种之多,汉字编码
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
数百种,但编码的
方式不外乎以下四大类:
•流水码:用数字组成的等长编码,如国标码、区位码;
•音 码:根据汉字读音组成的编码,如拼音码;
•形 码:根据汉字的形状、结构特征组成的编码,如五笔字型码。
•音形码:将汉字的读音与其结构特征综合考虑的编码,如自然码、钱码等。
1)区位码
区位码将汉字字符编成行列结构的二维矩阵,其中的行又称为区,列又成为位,区位码由此得
名,区和位均用两位十进制数表示,因此,对应于一个汉字的区位码由四位十进制数构成,其中前
两位对应区、后两位对应位。区位码将汉字编码 GB2312-80 中的 6763 个汉字分成 94 个区和 94 个位。
如 1763 为“边”字对应的区位码。区位码具有如下特点:
(1)无重码;
(2)等长,所有汉字的区位码都是四位;
(3)由于汉字的区位与汉字之间的对应关系没有什么规律,记忆困难;
行 列
15
(4)除输入汉字外,还能输入各种图形字符和制表符等。
2) 拼音码
直接用汉字的拼音作为汉字编码,即每个汉字的拼音本身就是其输入码。这种编码具有如下特
点:
(1) 具有重码,输入汉字拼音后还需要翻屏选择具体的汉字;
(2) 编码长度较长且可变
(3) 容易使用,不需要任何其他的记忆,只要会拼音,就能输入汉字;
(4) 只能输入汉字。
目前常见的拼音码主要包括全拼音、智能 ABC 等。
3)字形编码
这是一种根据汉字的形状、结构特征组成的编码,主要方法是将汉字拆分成若干个基本成分,
用这些基本部分组成汉字的编码。由于拆分汉字的角度、方法不同,因而产生出各种各样的形码。
其中五笔字型码是最为流行和普及的字形编码。该码特点是:重码少,输入速度快,但需要有一定
的记忆。
4)音形结合编码方法
音形码是既考虑汉字的读音,又要考虑汉字的结构特征的一类输入码,它们通常由两部分组成,
即反映汉字读音的编码和表现汉字本身结构特征的字根编码。如“吴”字只可以拆成“口”、“天”
两个字元。这种情况下,编码由两个字元拼音的第一个字母和该字的末划与该字本身字音的第一个
字母组成。“口”、“天”的拼音分别为 Kou、Tian,该字的最后一画“捺”的拼音为 Na,“吴”的拼
音为 Wu,所以“吴”字的编码为 KTNW。
音形码的种类很多:首尾码、快速码、音形码、形声码、表形码、钱码、自然码等。其中自然
码、钱码尤为突出。音形码的特点是选用的字根少,记忆量小。
2.汉字机内码
汉字机内