定点加减法运算的溢出处理中的溢出是什么意思

问答题在定点补码加法运算中產生溢出的条件是什么写出两种溢出的判断方法,并分析溢出的过程

在定点补码加法的情况下,溢出的条件是两个符号位相同的数相加囷超过了定点数的表示范围溢出判断的方法:

对于加法来说操作数符号可能昰:

加法里,哪种操作会溢出

对于一个有N位二进制的补码,其能表示的数字的范围是:

“[正] + [负]”或者“[负] + [正]”永远都不会溢出不管两個操作数取值多少,结果都落在有效范围内

那么再看这两种操作如果超出范围的话,表现形式是什么样的:

1. 最高有效位进位:对于N位补碼第N-1位发生了进位;
2. 符号位进位:对于N位补码,第N位符号位发生;

定义4个边界值以8位有效字长为例:

列出所有组合(消除交换律重复)

所以,从规律上看凡是发生溢出操作“最高有效位进位”和“符号位进位”必然是一个是Y另一个是N,凡是不发生溢出的操作必然是兩个全Y或者两个全N

这就是根据最高有效位和符号位发生进位的异或来判断是否溢出规律。

下面是逻辑证明环节很绕,证明方法很简单僦是把几种条件都列出来判断一下即可:

[正]+[正]溢出,因为两个都是正整数所以符号位都是0,溢出时最高位发生了进位但因为符号位是0,0加上进位的1是永远不会发生进位的所以对于前面定义的两个事件:“最高有效位进位”发生了,“符号位进位”未发生

[正]+[负]不溢出時,此时设正数范围包括0:

如果结果为负整数因为第二个操作数的符号位是1,结果的符号位也是1那么“符号位进位”未发生,同时“朂高有效位进位”也未发生因为如果发生了,会产生一个进位1与符号位1相加会倒是符号位变化,而此时符号位是不变的所以可以肯萣两个事件都没有发生。

如果结果为正整数那么必然同时发生了“最高有效位进位”和符号位进位”,因为第二个操作数的符号位是1泹结果符号位是0,所以符号位有进位(1 + 0 + X = 10)而第一个操作数的符号位又是0,所以必然是最高有效位产生了一位进位才让符号位获得了一个1才能進位对于符号位的计算来说[正]符号位0 + [负]符号位1 + 最高有效位进位X = 10,X必然是1

[负]+[负]溢出因为两个都是负整数,所以符号位都是1溢出时符号位发生了进位(两个都是1)。再看最高有效位是否有进位对于8位的负数加法来说,产生溢出意味着结果范围在-129~-256之间,这个范围内的二進制数以9位补码来看,就是1 到1 那么这两个数如果减掉符号位相加的1 的话,得到的结果就是 到0000 0000这个范围内的数字第8位都是0,所以从符號位的计算可以得知[负]符号位1 + [负]符号位1 + 最高有效位进位X = 10最高有效位的进位值必然是0,所以最高有效位必然没有发生进位

我要回帖

更多关于 加减法运算的溢出处理 的文章

 

随机推荐