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