第2章 数据表示与运算
2.1 考点归纳
【考纲指定考点】
【题型以及考点分析】
本章主要介绍了计算机中数据的表示方式,以及运算方法。本章每年出1~3道选择题或者一个选择题一个大题。常考考点主要有定点数加减乘除运算,浮点数加减运算,以及IEEE754浮点数表示方法,溢出判断,大小比较等,本章考点容易与C语言的相关知识点结合起来出题。
一、数制以及编码
1进位计数制及相互转换
(1)进位计数制
在进位计数制中,每个数位所用到的不同数码的个数称为基数,每个数码所表示的数值等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为位权。常用进位计数制有二进制,八进制,十进制,十六进制。
①二进制:基数为2的计数制,只有0和1两种数字符号,计数逢二进一,它的任意数位的权为2i,i为所在位数,常用于计算机中。
②八进制:基数为8,有0~7共8个不同的数字符号,计数逢八进一,因为8=23,所以只要把二进制中的3位数码编为一组就是一位八进制数码,两者之间的转换极为方便。
③十六进制:基数为16,每个数位可取0~9、A、B、C、D、E、F中的任意一个,其中A、B、C、D、E、F分别表示10~15。计数逢十六进一,4位二进制数码与1位十六进制数码相对应。
(2)各进制数间相互转换
①二进制转八进制或十六进制
对于一个二进制数,如果其既包含整数部分,又包含小数部分,转换时以小数点为界。其整数部分,从小数点开始往左数,转换为八进制时,三位一组,转换为十六进制时,四位一组,在数的最左边可根据需要加“0”补齐;对于小数部分,从小数点开始往右数,也同样将二进制数分为3位一组(八进制)或4位一组(十六进制),在数的最右边也可根据需要加“0”补齐,然后分别用对应的八进制或十六进制数取代。
②任意进制转为十进制
将任意进制的数各位数码与它们的权值相乘,再把乘积相加,就得到了一个十进制数。
③十进制转为任意进制
整数部分的转换:整数部分除基取余,最先取得的余数作为最低位,最后取得的余数为最高位,商为0时结束。
小数部分的转换:小数部分乘基取整,最先取得的整数为最高位,最后取得的整数为最低位,乘积为0(或满足精度要求)时结束。
转换后,将整数部分与小数部分合并即可得到转换后的数。
2数据编码
(1)数据真值与机器数
①真值:带有正、负号的数。
②机器数:在计算机中将符号与数值一起编码,这种符号数字化的数就成为机器数。真值是机器数所表示的实际值。
(2)BCD码
BCD码是指二进制编码的十进制数(Binary Coded Decimal,BCD)采用4位二进制数来表示一位十进制数中的0~9这10个数码,BCD有以下三种表示形式:
①8421码:它是一种有权码,设其各位的数值为b3、b2、b1、b0,则权值从高到低依次为8、4、2、1,则它表示的十进制数为D=8b3+4b2+2b1+1b0。
②余3码:它是一种无权码,是在8421码的基础上加上(0011)2形成的,因每个数都多余“3”,故称为余3码。
③2421码:它也是一种有权码,权值由高到低分别为2、4、2、1,特点是大于等于5的4位二进制数中最高位为1,小于5的最高位为0。
(3)字符与字符串的表示
①字符的ASCII码
ASCII码是美国信息交换标准码,后来被国际上普遍采用,标准ASCII用7位二进制编码,可表示10个十进制数码、52个英文大写和小写字母(A~Z,a~z)以及一定数量的专用符号,共128个字符。其中必须要知道,0~9的ASCII码值为48(0110000)~57(0111001),其低4位,则正好是二进制形式的0~9。还有扩展的ASCII用8位二进制编码,可表示256个字符,前128与标准ASCII相同。
②汉字的表示与编码
由于汉字字数很多,使用ASCII无法满足需要。因此汉字采用其他编码方式,目前我国已经发布了GB 2312—80,以及GB 18030等国家标准。
汉字的编码包括汉字的输入编码、汉字内码、汉字字形码三种,它们是计算机中用于输入、内部处理和输出三种用途的编码。
a.汉字的输入编码
汉字的输入编码一般有三种常用输入码:
国标区位码:用数字串代表汉字,区位码是国家标准局于1981年颁布的标准,用两个字节表示一个汉字,每个字节用七位码,它将汉字和图形符号排列在一个94行94列的二维代码表中。区码和位码各表示两位十进制数,国标码=(区位码)16+2020H,汉字内码=(国标码)16+8080H。
拼音码:以汉语拼音作为输入码,容易记忆,缺点重码率高。
字形码:将汉语笔画用数字或者字符编码,按一定顺序输入即可得到汉字。
b.汉字内码
汉字内码用于计算机存储,处理加工,传输时所用的二进制编码,与ASCII码类似。
c.汉字字形码
汉字字形码用于显示或者打印输出,常用点阵或矢量表示。
③字符串表示方式
字符串就是连续的一串字符,它们在主存中占用多个连续字节,每个字节存储一个字符。目前主要有两种方式存放字符串:
a.大端模式:按先存储高位字节,后存储低位字节的顺序存放字符串的内容。
b.小端模式:可按先存储低位字节,后存储高位字节的顺序存放字符串的内容。
3校验码
校验码是指据有发现错误或者指出错误位置的的数据编码方式。其原理是使用冗余编码,来检验或纠正错误。
校验码中,任意两个合法编码之间不同的二进制位数,而这两个合法码之间的二进制位数就称为码距。
码距不小于2的数据校验码,开始具有检错的能力。码距越大,检、纠错能力就越强,而且检错能力总是大于或等于纠错能力,与此同时编码效率也越来越低。
常用的校验码有以下三种:
(1)奇偶校验码
奇偶效验码,在原数据的尾部加上一位校验码,码距为2,只能检错,不能纠错,只有发生错误的位数为奇数时,它才能检测出来。奇偶校验实现的方法:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码,校验位的取值(0或1)将使整个校验码中。“1”的个数为奇数或偶数,所以有两种可供选择的校验规律。
奇校验码:整个校验码中“1”的个数为奇数。
偶校验码:整个校验码中“1”的个数为偶数。
(2)海明码
海明码是一种多重(复式)奇偶检错系统。它将信息用逻辑形式编码,以便能够检错和纠错。用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。每一个这种奇偶位被编在传输码字的特定位置上。这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。
推导并使用长度为m位的码字的海明码,所需步骤如下:
①确定最小的校验位数k,将它们记成D1、D2、…、Dk,每个校验位符合不同的奇偶测试规定。
②原有信息和k个校验位一起编成长为m+k位的新码字。选择k校验位(0或1)以满足必要的奇偶条件。
③对所接收的信息作所需的k个奇偶检查。
④如果所有的奇偶检查结果均为正确的,则认为信息无错误。
如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。
下面用一下例子说明海明码的求解过程,假设n=4,k=3
①确定海明码的位数
设n为有效信息的位数,k为校验位的位数,则信息位n和校验位k应满足:n+k≤2k-1
海明码位数为n+k=7≤23-1成立,则n、k有效。信息位设为D4D3D2D1(1010),共4位,校验位P3P2P1,共3位。故其海明码为H7H6H5H4H3H2H1。
②确定校验位的分布
规定校验位Pi在海明位号为2i-1的位置上,其余各位为信息位,因此:
P1的海明位号为2i-1=20=1,即H1为P1。
P2的海明位号为2i-1=21=2,即H2为P2。
P3的海明位号为2i-1=22=4,即H4为P3。
将信息位按原来的顺序插入,则海明码各位的分布如下:
③分组,以形成校验关系
每个数据位用多个校验位进行校验,但要满足:被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和。另外,校验位不需要再被校验。由题目要求可知D1由P2P1校验,D2由P3P1校验,D3由P3P2校验,D4由P3P2P1校验。
④校验位取值
校验位Pi的值为第i组(由该校验位校验的数据位)所有位求异或。根据③中的分组有:
P1=D1⊕D2⊕D3=0⊕1⊕1=0
P2=D1⊕D3⊕D4=0⊕0⊕1=1
P3=D2⊕D3⊕D4=1⊕0⊕1=0
所以,1010对应的海明码为1010010。
⑤海明码的校验
每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验检查,就构成了k个校验方程:
S1=P1⊕D1⊕D2⊕D3
S2=P2⊕D1⊕D3⊕D4
S3=P3⊕D2⊕D3⊕D4
若S3S2S1的值为“000”,则说明无错;否则说明出错,而且这个数就是错误位的位号,如S3S2S1=001,说明第1位出错,即H1出错,直接将该位取反就达到了纠错的目的。
(3)循环冗余校验(CRC)码
循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
CRC码的生成步骤如下:
①将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数;
②将信息码左移R位,相当与对应的信息多项式G(x)*2R;
③用生成多项式(二进制数)对信息码做模2除,得到R位的余数;
④将余数拼到信息码左移后空出的位置,得到完整的CRC码。
下面使用一个例子来说明,CRC校验码的生成过程。
设生成多项式为G(x)=x3+x2+1,信息码为101001,求对应的CRC码。
a.转换
R=生成多项式最高幂次=3,K=信息码长度=6,N=K+R=9。生成多项式G(x)对应的二进制码为1101。
b.移位
将原信息码左移R位,低位补0。得到101001000。
c.相除
对移位后的信息码,用生成多项式进行模2除法,产生余数。模2加法和减法的结果相同,都是做异或运算,模2除法和算术除法类似,但每一位除(减)的结果不影响其他位,也就是不借位,步骤如下:
第一,用除数对被除数最高几位做模2减(异或),不借位。
第二,除数右移一位,若余数最高位为1,商为1,并对余数做模2减。若余数最高位为0,商为0,除数继续右移一位。
第三,循环直到余数位数小于除数时,该余数为最终余数。
模2除法,得到的余数为001,则报文101001编码后的报文(即CRC码)为101001001。
d.检错和纠错
接收端收到的CRC码,用生成多项式G(x)做模2除法,若余数为0,则码字无错。
若接收端收的CRC码为C9C8C7C6C5C4C3C2C1=101001011,将这个数据与1101进行模2除法,得到的余数为010,则说明C2出错,将C2取反即可。
二、定点数的表示和运算
1定点数的表示
在计算机中的数据可以分为有符号数与无符号数。对于无符号数,整个机器字长的二进制位均为数值位,8位无符号数可表示范围为0~255;对于有符号数,一般用最高位表示符号位,用0表示正,1表示负,其余位为数值位。
定点数是小数点位置固定的数。通常情况下,小数点位置固定在最高位(定点小数),或者小数点位置固定在最低位(定点整数)。
①定点小数
在定点数中,小数点位置固定,表示小数时,小数点固定在最高位,故定点小数为纯小数。数据X的形式为x0x1x2…xn其中x0为符号位,x1~xn是数值的有效部分,也称为尾数,x1为最高有效位。其所能表示的最大正数为1-2-n;最小负数为-(1-2-n)。
②定点整数
定点整数小数点位置在最后,表示纯整数。数据X可表示为如下形式x0x1x2…xn其中x0为符号位,x1~xn是尾数,xn为最低有效位。X其所能表示的最大正数,真值等于2n-1;其所能表示的最小负数为-(2n-1)。
2原码,反码,补码,移码
(1)原码表示法
原码用最高位表示该数的符号,其余的各位表示数的数值。其定义如下:
①纯小数的原码定义:
②整数原码定义:
对于n+1的原码来说,其小数的表示范围为-(1-2-n)≤X≤1-2-n,整数表示范围为-(2n-1)≤X≤2n-1,原码数据表示范围关于原点对称。零的原码有正零和负零两种形式:[+0]原=00000,[-0]原=10000。
(2)反码表示法
反码:机器数的一种表示形式,最高位为符号位,其余位正数时与原码相同,负数时取反。其定义如下:
纯小数的反码定义:
整数反码定义:
对于字长为n+1的反码而言,小数的表示范围为-(1-2n)≤X≤1-2-n,整数反码的表示范围为-(2n-1)≤X≤2n-1。0的反码表示方式也有两种:[+0]反=0.0000,[-0]反=1.1111。
(3)补码表示法
补码是计算机中广泛使用的一种机器数表现形式,常用于计算机的计算过程中。
纯小数的补码定义:
纯整数的补码定义:
对于字长为n+1的补码而言,小数的表示范围为-1≤X≤1-2-n,整数的表示范围为-2n≤X≤2n-1,0的补码表示是唯一的。即[+0]=[-0]=0.0000。
(4)移码表示法
移码(又叫增码)是符号位取反的补码,相当于在真值上加上一个偏置值,一般用做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。
移码特点:
①移码中零的表示唯一,[+0]移=[-0]移=100…0。
②一个真值的移码和补码仅差一个符号位。
③移码全0时,代表其最小值-2n;移码全1时,表示其最大值2n-1。
④移码大真值就大,移码小真值就小。
(5)原码,反码,补码,移码间相互转换
对于整数而言,原码,反码,补码形式均相同。
对于负数,原码是符号位为1,数值部分取X绝对值的二进制。反码是符号位为1,其它位是原码取反。补码是符号位为1,其它位是原码取反,未位加1。也就是说,负数的补码是其反码末位加1。
移码就是将符号位取反的补码。
3定点数运算
(1)定点数移位运算
移位运算包括算术移位与逻辑移位,一般对有符号进行算术移位,逻辑移位一般对无符号数进行。
①算术移位
在算术移位过程中,符号位不变。对于正数,移位后空位补0,负数时,原码,反码,补码的填补方式有所不同。
a.原码移位时,要使符号位不变,其空位均添0。
b.反码移位时,符号位不变,其余空位部添1。
c.补码左移时,空位出现在低位,添0;右移时因空位出现在高位,则添1。
②逻辑移位
逻辑移位将操作数看做无符号数看待,移位规则:无论逻辑左移还是逻辑右移都在空缺位添0。
③循环移位
循环移位分为带进位标志位CF的循环移位(大循环)和不带进位标志位的循环移位(小循环)。不带标志的循环移位过程中,将最高位送到CF中,带进位的循环移位,标志位参与移位。下面给出几种移位的示意图。
图2-1 几种循环移位方式
【例】在补码表示的机器中,若寄存器A中原存的数为9EH,现存的数为CFH,则表明执行的一条指令是( )
A.算术左移
B.逻辑左移
C.算术右移
D.逻辑右移
【答案】C
【解析】寄存器A中原存内容10011110,现存内容11001111,说明执行了一条算术右移指令。
(2)定点数原码加/减法
在进行原码加减运算时规则如下:
①加法规则:先判符号位,若相同,绝对值相加,结果符号位不变;若不同,则做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同。
②减法规则:两个原码表示的数相减,首先将减数符号取反,然后将被减数与符号取反后的减数按原码加法进行运算。
运算时注意机器字长,当左边位出现溢出时,将溢出位丢掉。原码运算在机器不易实现,故在计算机中采用补码进行运算。
(3)定点数补码加/减法
补码进行加减运算规则简单,容易实现。进行运算时,首先将数据变为补码形式。其运算原则如下:
①加法:整数[A]补+[B]补=[A+B]补(mod 2n+1),小数[A]补+[B]补=[A+B]补(mod 2)。
②减法:整数[A-B]补=[A]补+[-B]补(mod 2n+1),小数[A-B]补=[A]补+[-B]补(mod 2)。
补码运算的结果还是补码。
【例】一个C语言程序在一台32位机器上运行。程序中定义了三个变量x、y和z,其中x和z是int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,x、y和z的值分别是( )。
A.x=0000007FH,y=FFF9H,z=00000076H
B.x=0000007FH,y=FFF9H,z=FFFF0076H
C.x=0000007FH,y=FFF7H,z=FFFF0076H
D.x=0000007FH,y=FFF7H,z=00000076H
【答案】D
【解析】结合题干及选项可知,int为32位,short为16位;又C语言的整型数据在内存中为补码形式,故x、y的机器数写为十六进制为0000007FH、FFF7H。执行z=x+y时,由于x为int型,y为short型,故需将y的类型强制转换为int,在机器中通过符号位扩展实现,由于y的符号位为1,故在y的前面添加16个1,即可将y强制转换为int型,其十六进制形式为FFFFFFF7H;然后执行加法,即0000007FH+FFFFFFF7H=00000076H(最高位的进位1自然丢弃)。
(4)定点数乘法
①原码一位乘法
原码的一位乘法与进行手工计算的过程相似,将数值计算与符号运算分开,其符号为由两数的符号位异或给出,数值部分由两数绝对值相乘,其基本规则如下:
a.部分积的长度同被乘数,取n+1位,以便存放乘法过程中绝对值大于或等于1的值,初值为0。
b.从乘数的最低位yn开始判断:若yn=1,则部分积加上被乘数x,然后右移一位;若yn=0,则部分积加上0,然后右移一位。
c.重复步骤b,判断n次。
原码一位乘法运算过程中的右移操作均为逻辑右移。
②补码一位乘法
补码一位乘法,首先将两数化为补码形式,符号位直接参与计算,其基本运算规则如下:
a.被乘数与部分积一般取双符号位参与运算,初值为0,乘数可取单符号位。
b.乘数末位增设附加位,且初值为0。
c.根据(yi,yi+1)的取值来确定操作。
表2-1 位移规则
d.移位按补码右移规则进行。
补码算法,对于n位数,要进行n+1次,最后一次不移位。
(5)定点数除法
①原码不恢复余数法
原码不恢复余数法是一种原码常用的除法运算,其特点是,符号运算与数值运算分离,在运算过程中,不用再花费时间恢复负数余数。其基本规则如下:
a.商的符号由除数与被除数的符号异或得到。
b.当余数为正时,商上1,余数和商左移一位,再减去除数。
c.当余数为负时,商上0,余数和商左移一位,再加上除数。
d.最后一步,不够减时,商0,加上除数,恢复余数。
②补码除法运算(加减交替法)
补码一位除法:符号位与数值位一起参加运算。第一步根据被除数和除数的符号决定是做加法还是减法;上商的原则根据余数和除数的符号位共同决定,同号上商“1”,异号上商“0”最后一步商恒置“1”。
加减交替法的规则如下:
a.除数与被除数均用补码表示,商和余数也用补码表示。
b.若被除数与除数同号,被除数减去除数;若被除数与除数异号,被除数加上除数。
c.若余数与除数同号,商上1,余数左移一位减去除数;若余数与除数异号,商上0,余数左移一位加上除数。
d.一般采用“末位恒置1”法,有精度要求另处理。
(6)溢出概念以及判断方法
溢出是指数据运算结果超出了数的表示范围,在计算机中才有的概念,因为计算机中数据表示范围有限。一般常用一下几种方式判断数据是否溢出:
①采用单符号位
在计算机中,无论加法还是减法都是采用加法的形式实现,如果参加操作的两个数数符相同,但是结果的操作符与原操作数不同,则发生溢出。
②采用双符号位
在双符号位表示法中两个符号位相同,表示未溢出,两个符号位S1S2不同,表示溢出,真正的符号有高位表示。主要由以下四种情况:
a.S1S2=00,表示结果为正数,无溢出;
b.S1S2=01,表示结果正溢出;
c.S1S2=10,表示结果负溢出;
d.S1S2=11,表示结果为负数,无溢出。
③用一位符号位以及数据位的进位情况判断溢出
如果符号位的进位Cs与最高数位的进位C1相同,则说明没有溢出,否则表示发生溢出。
【例】定点原码除法中,每次做被除数(余数)减除数,根据所得差的符号,判断是否够减,差数>0,说明够减,商“1”;差数<0,说明不够减,商“0”;第一位除法所求的商表示( )。
A.商的符号
B.商的第1位数值
C.商数溢出与否
D.无关
【答案】C
【解析】第一位除法所求的商若为0,则说明不够减,满足|被除数|<|除数|;第一位除法所求的商若为1,则说明够减,不满足|被除数|<|除数|。因此,第一位除法所求的商表示商数的溢出与否。
三、浮点数的表示和运算
1浮点数的表示
浮点数就是将比例因子以适当的形式表示在数据中,而且小数点的位置可以根据需要进行改变。浮点数的表示方法扩大了数据的表示范围。常用的浮点数表示方法如下:
图2-2 普通浮点数表示法
浮点数表示主要包括两个部分阶码部分与数值部分。阶码由阶符与阶码数值部分组成,数值部分由数符与尾数部分组成。小数点隐含表示,在尾数之前。阶码为整数,与阶符一起反应符点数的表示范围,尾数反应浮点数的精度。
(1)浮点数的规格化
浮点数的规格化操作就是调整浮点数的尾数和阶码的大小,浮点数在尾数的最高数位上是一个有效值(浮点数0除外)。一般来说,规格化操作主要有两种:
①左规:当浮点数尾数最高位不为1时要进行规格化处理,将尾数左移一位,阶码减1(基数为2时)的方法称为左规。
②右规:当浮点数尾数出现溢出时,将尾数右移一位,阶码加1(基数为2时),这种方法称为右规。规格化浮点数的尾数M的绝对值应满足:1/r≤|M|≤1(r为基数)。
尾数的基数为2时,原码规格化数的尾数最高位一定是1,补码规格化数的尾数最高位一定与尾数符号位相反。基数不同,浮点数的规格化形式也不同。
(2)IEEE754标准
IEEE754标准的常用格式如下:
图2-3 IEEE754浮点数表示法
其中阶符采用隐含表示,阶码用移码表示,尾数用原码表示。有三种常用格式:短浮点型,长浮点型,临时浮点型。其中数符都为1位,短浮点型阶码8位,尾数23位,偏置值为127。长浮点型阶码11位,尾数53位,偏置值1023。临时浮点型,阶码15位,尾数64。
在IEEE754标准中,实际阶码值=E-偏置值。而且对于规格化的二进制浮点数,数值的最高位总是“1”,为了能使尾数多表示一位有效位,将这个“1”隐含,因此尾数数值实际上是24位。隐含的“1”是一位整数。在浮点格式中表示出来的23位尾数是纯小数。规格化的短浮点数的真值为:(-1)s×1.M×2E-127,规格化长浮点数的真值为:(-1)s×1.M×2E-1023。
2浮点数加减运算
浮点数运算时采用补码形式,运算时阶符运算与位数运算分开,先做阶符运算,在进行尾数运算。浮点数运算包括以下几个步骤:
(1)对阶
对阶就是使得两个浮点数的阶码相等。为此首先需要求取两数的阶码差M,小阶向大阶看齐,将阶码小的尾数右移M位(基数为2),使得两个数的阶码相等。尾数右移时,舍弃掉有效位会产生误差,影响精度。
(2)尾数求和
将对阶后的尾数按定点数加(减)运算规则运算。
(3)规格化
规格化分为左规与右规两种,规格化的方法见上文。
(4)舍入处理
在浮点数的对阶和右规的过程中,可能会将尾数低位丢失,此时需要采取一些从处理方法降低精度损失。常见的舍入方法有:
①0舍1入法:在尾数右移时,如果被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。
②恒置1法:尾数右移时,不论丢掉的最高数值位是1还是0,都使右移后的尾数末位恒置1。
(5)溢出判断
浮点数的溢出与否是由阶码的符号决定的,尾数溢出浮点数不一定溢出。使用双符号位时,当阶码的符号位为“01”时,即阶码大于最大阶码,表示上溢,此时会引发中断进行处理;当阶码的符号位出现“10”时,即阶码小于最小阶码,表示下溢,按机器零处理,不会引起中断。
【例】浮点数加减运算过程一般包括对阶、尾数运算、规格化、舍人和判断溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7位(均含2位符号位)。若有两个数X=27×29/32,Y=25×5/8,则用浮点加法计算X+Y的最终结果是( )。
A.001111100010
B.001110100010
C.010000010001
D.发生溢出
【答案】D
【解析】根据题意,X可记为00,111;00,11101(分号前为阶码,分号后为尾数),Y可记为00,101;00,10100;首先对阶,X、Y阶码相减,即00,111一00,101=00,111+11,011=00,010(最高位进位自然丢弃),可知X的阶码比Y的阶码大2,根据小阶向大阶看齐的原则,将Y的阶码加2,尾数右移2位,得Y为00,111;00,00101;尾数相加,即00,11101+00,00101=01,00010,尾数相加结果符号位为01,故需进行右规;规格化,将尾数右移1位,阶码加1,得X+Y为01,000;00,10001,阶码符号位为01,说明发生溢出。
四.算术逻辑单元(不是重点)
1.一位全加器
一位全加器实现了两个一位数据的加法,其有加数A被加数B下级进位Ci-1三个输入,有运算结果S与进位Ci两个输出。其逻辑表达式为:
S=A⊕B⊕Ci-1
Ci=AB+(A⊕B)Ci-1
2串行加法器
串行加法器只有一个全加器,数据逐位送入加法器中进行运算。如果操作数位长为n,加法就要分n次进行,每次产生一位和,结果串行的送到寄存器中,用触发器来保存进位信号,并参与下一次计算。
3并行加法器
用n位全加器实现两个n位操作数各位同时相加,这种加法器称谓并行加法器。并行加法器中全加器的位数与操作数的位数相同。并行加法器从相对于串行加法器来说速度提升不少。但是并行加法器在进位传递时会产生时延,并且并行加法器的最长运算时间由此时延决定。
并行加法器有两种常用的进位方式:
(1)串行进位
将n个全加器串联,每一个全加器的进位输入依赖于上一级的进位输出。采用此种方式,进位时延大,但是全加器结构简单。
(2)并行进位
将各级全加器的进位信号同时作为全加器的输入,同时形成进位信号。采用并行进位方式提高了全加器的运行速度,相对应的硬件成本也增加。
4ALU逻辑算术单元
ALU是一种组合逻辑电路,它能进行多种算术运算和逻辑运算。ALU的核心是一个并行加法器,通过此加法器可以完成加减乘除等算术运算。同时ALU也能执行“与”“或”“非”等逻辑运算。ALU通过函数发生器产生不同信号,以完成不同操作。其结构如下图所示。
图2-4 算术逻辑单元
Ai和Bi为输入变量;Si为控制信号,Si的不同取值可决定该电路做哪一种算术运算或哪一种逻辑运算;Fi为输出函数;Ci为进位信息。