运算方法和运算器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章运算方法与运算器

2.1.1 数值数据在机内的表示

在选择计算机的数值数的表示方式时,需要考虑以下几个因素:(1)要表示的数的类型(小数、整数、实数和复数);(2)可能遇到的数值范围;(3)数值精确度;(4)数据存储和处理所需要的硬件代价。

2.1.1.1 定点数与浮点数

计算机处理的数值数据多数带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数;另一种是小数点位置可以浮动,称为浮点表示法,简称浮点数。

1. 定点数表示法(fixed-point)

所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。

定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。

2. 浮点数表示法(floating-point number)

与科学计数法相似。

2.1.1.2 数的机器码表示

1. 原码表示法

原码表示法是一种比较直观的表示方法,其符号位表示该数的符号,正用“0”表示,负用“1”表示;而数值部分仍保留着其真值的特征。

2. 补码表示法

由于计算机的运算受一定字长的限制,属于有模运算,所以,在计算机中可以使用补码进行计算。在定点小数机器中数最大不超过1,也就是负的小数对“1”的补码是等价的。但实际上,负数的符号位还有一个“1”,要把它看成数的一部分,所以要对2求补码,也就是以2为模数。

3. 反码表示方法

反码表示法中,符号的表示法与原码相同。正数的反码与正数的原码形式相同;负数的反码符号位为1,数值部分通过将负数原码的数值部分各位取反(0变1,1变0)得到。

4. 移码表示法

移码通常用于表示浮点数的阶码。

2.1.2 非数值数据在机内的表示

计算机中数据的概念是广义的,机内除了有数值的信息之外,还有数字、字母、通用符号、控制符号等字符信息有逻辑信息、图形、图像、语音等信息,这些信息进入计算机都转变成0、1表示的编码,所以称为非数值数据。

2.1.2.1 字符的表示方法

字符主要指数字、字母、通用符号、控制符号等,在机内它们都被变换成计算机能够识别的十进制编码形式。这些字符编码方式有很多种,国际上广泛采用的是美国国家信息交换标准代码(American

Standard Code for Information Interchange),简称ASCII 码。

2.1.2.2 汉字的表示方法

1. 汉字的输入码

目前,计算机一般是使用西文标准键盘输入的,为了能直接使用西文标准键盘输入汉字,必须给汉字设计相应的输入编码方法。其编码方案有很多种,主要的分为三类:数字编码、拼音码和字形编码。

2. 汉字的内码

3. 汉字字形码

2.2.1 补码加法运算

补码加法的公式是:

[ x ]补+ [ y ]补= [ x + y ]补( mod 2 )

含义是:两个数的补码之和等于两个数之和的补码。

2.2.2 补码减法运算

[x-y]补=[x]补-[y]补=[x]补+[-y]补( mod 2 )

2.2.3 溢出概念及检测方法

在计算机中,若采用定点小数,数的表示范围为|x|<1,如果出现运算结果超出数的表示范围的现象,就称为溢出。在采用定点整数的情况下,由于机器字长一定,所以能表示的数据范围也是有限的,仍存在溢出问题。产生溢出会丢失有效数字,结果将是错误的,因此,必须解决溢出的判断问题,当计算过程中出现溢出时,能及时处理。

两个正数相加,结果大于机器所能表示的最大正数,称为正溢。而两个负数相加,结果小于机器所能表示的最小负数,称为负溢。

为了判断“溢出”是否发生,可采用两种检测方法。

1.变形补码操作检测方法

2.单符号位操作检测方法

2.2.4 基本的二进制加法/减法器

重点介绍一位全加器(FA)。

2.3.1 原码一位乘法。

在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运算得到,而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也同样适用)

被乘数[x]原= xf .x0 x1 x2 …xn

乘数[y]原= yf .y0 y1 y2 …yn

乘积[ z ]原= ( xf⊕yf ) . (0. x0 x1 x2 …xn)(0 . y1 y2 …yn)

式中,xf为被乘数符号,yf为乘数符号。

乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数和符号组合只有四种情况(xf yf = 00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。

数值部分的运算方法与普通的十进制小数乘法相类似,不过对于用二进制表达的数来说,其乘法规则更为简单一些:从乘法y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“0”,则写下全0。然后再对乘数y的高一位进行的乘法运算,其规则同上,不过

这一位乘数的权与最低位乘数的权不一样,因此被乘数x要左移一位。依次类推,直到乘数各位乘完为止,最后将它们统统加起来,便得到最后乘积z 。

2.3.2 补码一位乘法

原码乘法的主要问题是符号位不能参加运算,单独用一个异或门产生乘积的符号位。故自然提出能否让符号数字化后也参加乘法运算,补码乘法就可以实现符号位直接参加运算。

2.4.1 原码一位除法

两个原码表示的数相除时,商的符号由两数的符号按位相加求得,商的数值部分由两数的数值部分相除求得。

设有n位定点小数(定点整数也同样适用):

被除数x,其原码为[x]原= xf . x1 x2 …xn

除数y,其原码为[y]原= yf . y1 y2 …yn

设商为q = x/y,其原码为[q]原= ( xf⊕yf ). ( x1 x2 …xn / y1 y2 …yn )

商的符号运算qf= xf⊕yf 与原码乘法一样,用模2

求和得到。商的数值部分的运算,实质上是两正数求商的运算。根据我们所熟知的十进制除法运算方法,很容易得到二进制数的除法运算方法,所不同的只是在二进制中,商的每一位不是“1”就是“0”,其运算法则更简单一些。

1.恢复余数法

事实上,机器的运算过程和人毕竟不同,人会心算,一看就知道够不够减。但机器却不会心算,必须先做减法,若余数为正,才知道够减;若余数为负,才知道不够减。不够减时必须恢复原来的余数,以便再继续往下运算,这种方法称为恢复余数法。要恢复原来的余数,只要当前的余数加上除数即可。

2.加减交替法

对恢复余数法来说,由于要恢复余数,使除法进行过程的步数不固定,因此控制比较复杂。实际上常用不恢复余数法,又称加减交替法。其特点是运算过程中如出现不够减,则不必恢复余数,根据余数符号,可以继续往下运算,因此步数固定,控制简单。

原码加减交替法的规则是:当余数为正时,商“1”,余数左移一位减除数;当余数为负

相关文档
最新文档