|||
这里讲用硬件如何实现两个无符号数相加时,结果是否溢出的判断方法。
假设两个加数为A和B,和为C,即A+B=C,其中A、B、C都是n位的,假设溢出位为o。
方法1:o=(A[n-1]&B[n-1])|(((A[n-1]&(~B[n-1]))|((~A[n-1])&B[n-1]))&(~C[n-1]))
使用的时候,通过组合电路生成C和o,然后将C和o寄存。
这种方法适用于硬件中没有全加器,只有半加器的情况。
方法1指出溢出的条件为:当A、B的最高位为1时,和溢出;当A和B的最高位有一个为1时,当C的最高位为0时溢出。
证明:假设A的最高位为1,B的最高位为0,则A的取值范围[0,2n-1-1],B的取值范围[2n-1,2n-1]。那么A+B的取值范围为[2n-1,2n+2n-1-2],当A+B的值位于[2n-1,2n-1]时,没有溢出,C的最高位肯定为1;当A+B的值位于[2n,2n+2n-1-2]时,溢出,C的最高位肯定为0(因为数值范围[2n,2n+2n-1-1]的次高位,也就是C的最高位都为0)。
方法2:当硬件中有全加器时,将C扩展为n+1位,则o=C[n]。
方法3:当C<B或者C<A时,肯定就溢出了。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-20 09:26
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社