定点数的加减法


数值运算的核心是加、减、乘、除四则算术。

由于计算机中的数有定点和浮点两种表示形式,因此相应有定点数的运算和浮点数的运算。本文将介绍计算机中定点数的加减法运算过程。

注意,理解本文的前提是要清楚知道定点数的原码、反码和补码的含义,以及定点数在计算机中的表示形式。

1.补码加法

由于计算机中定点数均以补码的方式表示和存储,采用补码表示法进行加减运算比原码方便多了,因为不论是正还是负,机器总是做加法,减法运算可变成加法运算。

这里再次说明定点数(定点整数和定点小数)的原码、反码和补码的表示规则:

  • 正数的符号位为0,反码和补码等同于原码。
  • 负数符号位都固定为1,原码,反码和补码的表示都不相同,由原码表示法变成反码和补码有如下规则:
    • 原码符号位为1不变,整数的每一位二进制数位求反得反码。
    • 反码符号位为1不变,反码数值位最低位加1得补码。

1.1 补码加法公式

补码加法公式是:
[ x ] 补 + [ y ] 补 = [ x + y ] 补 ( m o d 2 n ) [x]_补+[y]_补=[x+y]_补 (mod 2^n) [x]+[y]=[x+y](mod2n)
这里说一下上面公式的意思。 m o d 2 n mod 2^n mod2n表示的是模运算, 2 n 2^n 2n为模,这个模表示被丢掉的值。上面的式子在数学上成为为同余式,即等式两边的值取 2 n 2^n 2n的余数是相等的。

以钟表为例,说明模运算。一个钟表有12个小时刻度,时间确实0-24小时。假设现在的标准时间是4点整,而有一个表已经7点了,为了校准时间,可以采用两种方法:一是将时针退7-4=3格;二是将时针向前拨12-3=9格。这两种方法都能对准到4点。由此可见,7-3和7+9是等价的。等价的条件就是以模为12的模运算的情况下等价,即除以12取余。以数学公式表示如下:
7 − 3 = 7 + 9 ( m o d 12 ) 7-3=7+9 (mod12) 73=7+9(mod12)

1.2 补码加法公式证明

可分五种情况来证明。假设采用定点整数表示。不包括溢出情况,该情况会另行讨论。

(1)x>0, y>0, 则x+y>0

由补码定义, [ x ] 补 = x , [ y ] 补 = y [x]_补=x, [y]_补=y [x]=x,[y]=y, 所以 [ x ] 补 + [ y ] 补 = x + y = [ x + y ] 补 [x]_补+[y]_补=x+y=[x+y]_补 [x]+[y]=x+y=[x+y]

(2)x<0, y<0, 则(x+y)<0
[ x ] 补 + [ y ] 补 = 2 n + x + 2 n + y = 2 n + ( 2 n + x + y ) = [ x + y ] 补 [x]_补+[y]_补=2^n+x+2^n+y=2^n+(2^n+x+y)=[x+y]_补 [x]+[y]=2n+x+2n+y=2n+(2n+x+y)=[x+y]

(3)x>0, y<0, 则(x+y)<0或(x+y)>0

相加的两数一个为正,一个为负,因此相加结果有正、负两种可能。根据补码定义: [ x ] 补 = x , [ y ] 补 = 2 n + y [x]_补=x, [y]_补=2^n+y [x]=x,[y]=2n+y,那么
[ x ] 补 + [ y ] 补 = x + 2 n + y = 2 n + ( x + y ) = [ x + y ] 补 [x]_补+[y]_补=x+2^n+y=2^n+(x+y)=[x+y]_补 [x]+[y]=x+2n+y=2n+(x+y)=[x+y]

(4)x<0, y>0, 则(x+y)<0或(x+y)>0

这种情况和第三种情况一样,将x和y对调即可,不再赘述。

(5)x=0 或 y=0 或 x=y=0

满足 [ x ] 补 + [ y ] 补 = [ x + y ] 补 ( m o d 2 n ) [x]_补+[y]_补=[x+y]_补 (mod 2^n) [x]+[y]=[x+y](mod2n)

因此在模 2 n 2^n 2n的意义下,任意两数的补码之和等于该两数之和的补码。这是补码加法的理论基础。

2.补码减法

负数的加法要利用补码化为加法来做,减法运算当然也要设法化为加法来做。其所以使用这种方法而不适用直接减法,是因为它可以和常规的加法运算使用同一加法器电路,从而简化了计算机的设计。

定点数用补码表示时,减法运算的公式为:
[ x ] 补 − [ y ] 补 = [ x ] 补 + [ − y ] 补 [x]_补-[y]_补=[x]_补+[-y]_补 [x][y]=[x]+[y]

为了证明这个公式,只要证明 [ − y ] 补 = − [ y ] 补 [-y]_补=-[y]_补 [y]=[y],上式即得证。

证明如下:
因为 [ x ] 补 + [ y ] 补 = [ x + y ] 补 [x]_补+[y]_补=[x+y]_补 [x]+[y]=[x+y],所以
①$ [y]_补= [x+y]_补–[x]_补$

[ x – y ] 补 = [ x + ( – y ) ] 补 = [ x ] 补 + [ – y ] 补 [x–y]_补= [x+(–y)]_补= [x]_补+[–y]_补 [xy]=[x+(y]=[x]+[y],所以
[ – y ] 补 = [ x – y ] 补 – [ x ] 补 [–y]_补= [x – y]_补–[x]_补 [y]=[xy][x]

①+②得 [ – y ] 补 + [ y ] 补 = [ x – y ] 补 – [ x ] 补 + [ x + y ] 补 – [ x ] 补 = [ x – y ] 补 + [ x + y ] 补– [ x ] 补– [ x ] 补 = [ x – y + x + y ] 补– [ x ] 补– [ x ] 补 = [ 2 x ] 补– 2 [ x ] 补 = 0 [–y]_补+[y]_补= [x–y]_补–[x]_补+[x+y]_补–[x]_补=[x–y]补+[x+y]补–[x]补–[x]补=[x–y+x+y]补–[x]补–[x]补 =[2x]补–2[x]补=0 [y]+[y]=[xy][x]+[x+y][x]=[xy]+[x+y][x][x]=[xy+x+y][x][x]=[2x]–2[x]=0

从而有 [ – y ] 补 = – [ y ] 补 ( m o d 2 n ) [–y]补= –[y]补 (mod 2^n) [y]=[y](mod2n)

因此,只要求得 [ – y ] 补 [–y]_补 [y],就可以变减法为加法,已知 [ y ] 补 [y]_补 [y],求 [ – y ] 补 [–y]_补 [y]的法则是:

[ y ] 补 [y]_补 [y]各位(包括符号位)取反,然后在末位加上1,就可以得到 [ – y ] 补 [–y]_补 [y]

示例:

[ X ] 补 = 00110110 , [ Y ] 补 = 11001101 [X ]_补=00110110,[Y]_补 =11001101 [X]=00110110[Y]=11001101,求 [ X ] 补 + [ Y ] 补 , [ X ] 补 − [ Y ] 补 [X]_补+[Y]_补,[X]_补-[Y]_补 [X]+[Y][X][Y] ,其中x=54,y=-51。
这里写图片描述

3.溢出概念与检测方法

3.1 溢出的概念

在定点整数机器中,数的表示范围 ∣ x ∣ < ( 2 n − 1 ) |x|<(2^n-1) x<(2n1)。在运算过程中如出现大于字长绝对值的现象,称为“溢出”。在定点机器中,正常情况下溢出是不允许的。

例:设定点整数字长8位,补码表示(最高位为符号位),表示范围为-128~127,运算结果超出此范围就发生溢出。

两个负数相加的结果小于机器所能表示的最小负数,结果变为负数,成为负溢

两个正数相加,结果大于机器字长所能表示的最大正数,结果成为变为负数,称为正溢

下面以具体的例子来演示正常的运算和溢出时的运算。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

3.2 溢出的检测方法

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

(1)单符号法
当两个操作数同号时,而其和的符号与操作数的符号不一致则就发出溢出,公式表示如下:
溢出 = A ‾ n B ‾ n S n + A n B n S ‾ n 溢出=\overline A_n\overline B_n S_n +A_n B_n\overline S_n 溢出=AnBnSn+AnBnSn

注意:
a、若是同号相减或异号相加,则运算结果不可能溢出;
b、若是同号相加或异号相减,则运算结果可能溢出。

(2)采用最高有效位的进位判断
溢出 = C ‾ n C n − 1 + C n C ‾ n − 1 = C ‾ n ⨁ C ‾ n − 1 溢出= \overline C_nC_{n-1} + C_n\overline C_{n-1}=\overline C_n\bigoplus \overline C_{n-1} 溢出=CnCn1+CnCn1=CnCn1

符号位产生的进位与最高有效位产生的进位情况不同,则溢出。

(3)采用变形补码判断(双符号位)
S n + 1 、 S n S_{n+1}、Sn Sn+1Sn分别表示结果最高符号位和第2个符号位。
溢出 = S n + 1 ⨁ S n 溢出=S_{n+1}\bigoplus S_n 溢出=Sn+1Sn
01:结果正溢;
10:结果负溢;

定点整数的加减运算完成之后,会由硬件逻辑电路进行溢出检测,如果发现存在溢出,则产生硬件中断 。

4.定点小数的加减运算法则

定点小数是定点数的一种,其运算法则和步骤与定点整数一致,不再赘述。下面举个仅以双符号位补码来表示定点小数的补码加减运算示例。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述


参考文献

计算机组成原理第四版[M].白中英.科学出版社
百度文库.定点数加减法

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值