在计算机体系结构中,2的补码系统被广泛使用。这里对溢出的讨论主要是关于2的互补系统。
N位2的补码系统可以表示 到
4位可以表示来自 (-8至7) 5位可以代表来自 (-16至15) 在2的赠品系统中。
当2个N位2的补码相加,且答案太大,无法放入该N位组时,加法会发生溢出。
计算机有N位固定寄存器。两个N位数字相加将得到最大N+1位数字。额外的位存储在进位标志中。但进位并不总是表示溢出。
在4位中加7+1必须等于8。但8不能用4位2的补码表示,因为它超出了范围。两个正数相加,得到的结果是负数(-8)。这里的进位也是0。通常由程序员来检测溢出并处理这种情况。
溢出检测– 溢出发生在以下情况:
- 两个负数相加,结果是正数或负数
- 两个正数相加,结果为负数。
因此,可以通过检查两个操作数的最高有效位(MSB)并进行应答来检测溢出。但是,不是使用3位比较器溢出,也可以通过使用2位比较器来检测,仅通过检查进位(C-in)和从MSB执行(C-OUT)。考虑2位补码的N位加法。
C-in时发生溢出 C-out。上面的溢出表达式可以通过下面的分析来解释。
在第一个图中,两个数字的MSB为0,这意味着它们是正的。如果在这里 C-in是1 我们得到答案的MSB为1,表示答案为负(溢出),并且 C-out为0。 C-in C-out因此溢出。
在第二个图中,两个数字的最大有效位是1,这意味着它们是负数。如果在这里 C-in为0 我们得到的答案MSB为0意味着答案为正(溢出),并且 C-out为1。 C-in C-out因此溢出。 读者还可以尝试c-in c-out和MSB的其他组合来检查溢出。
所以,在MSB的进位和进位足以检测溢出。
以上XOR门可用于检测溢出。