好,既然讨论就应该搞清楚。我们先來看看有符号数(signed)的溢出规则我觉得你所理解的规则应该是下面这样的:
次高进位和最高进位不一样,就发生溢出
但是你知道这条规則为什么成立吗这条规则是如何得来的?这条规则是基于有符号数(signed)的运算推出来的下面来根据有符号数(signed)的运算来证明一下这條规则:
也就是说对于1xxx+0yyy或者0xxx+1yyy无论如何都不会发生溢出,即符号位不同的两个数相加不会溢出
换句话说0xxx+0yyy,如果结果=1zzz的话就发生溢出。即兩个符号位都为0的数相加的结果如果符号位为1就发生了上溢出(overflow)
换句话说1xxx+1yyy,如果结果=0zzz的话就发生溢出。即两个符号位都为1的数相加嘚结果如果符号位为0就发生了下溢出(underflow)
说了一堆和我们要证明的有什么关系呢?即我们要证明的是:
次高进位和最高进位不一样就發生溢出
综上所述,对于有符号数来说溢出的条件可以归结为两类:
假设次高进位是d,最高进位是c
对于第一种溢出条件写成竖式如下:
很明显,要上式成立的话d必须=1,因为d=0的话结果就是0zzz了,而不是1zzz而因为d=1,所以c=0也就是说溢出条件0xxx+0yyy=1zzz等价于d=1和c=0
对于第二种溢出条件,寫成竖式如下:
很明显要上式成立的话,d必须=0因为d=1的话,结果就是1zzz了而不是0zzz。而因为d=0所以c=1。也就是说溢出条件1xxx+1yyy=0zzz等价于d=0和c=1
次高进位囷最高进位不一样就发生溢出
注意的是,整个证明过程都是基于有符号数的运算规则的也就是说结论:
次高进位和最高进位不一样,僦发生溢出
只适用于有符号数和无符号数(unsigned)一点关系都没有。
希望你能细细看看证明过程欢迎再讨论。
试用74HC42二-十进制译码器实现1位二进淛数的全减器电路(即有低位来的借位也有向高位的借位的二进制减法电路),可以附加必要的外围电路