📜  二进制数系统中算术加法的溢出

📅  最后修改于: 2021-06-28 15:52:55             🧑  作者: Mango

在计算机体系结构2中,恭维编号系统得到了广泛使用。这里关于溢出的讨论主要将针对2的免费系统。

N位2的恭维编号系统可以表示 - 2^{n-1} 2^{n-1} -1
4位可以代表(-8至7)之间的数字
5位代表2的免费系统中的(-16至15)数字。

当添加2个N位2的补充编号并且答案太大而无法放入该N位组时,会发生加法溢出。
计算机具有N位固定寄存器。将两个N位数字相加将得到最大的N + 1位数字。该额外位存储在进位标志中。但是,进位并不总是表示溢出。

在4位中加7 +1必须等于8。但是8不能用4位2的补码表示,因为它超出了范围。两个正数相加,得到的答案是负数(-8)。这里的进位也是0。通常留给程序员检测溢出并处理这种情况。

溢出检测–
在以下情况下发生溢出:

  1. 两个负数相加,答案为正数或
  2. 两个正数相加,答案为负数。

因此,可以通过检查两个操作数的最高有效位(MSB)并检测答案来检测溢出。但是,除了使用3位比较器之外,还可以使用2位比较器检测溢出,而只需检查MSB的进位(C-in)和进位(C-out)。考虑补码2的N位加法。

C-in时发生溢出 \neq C-out。上面的溢出表示可以从下面的分析中进行解释。

在第一张图中,两个数字的MSB为0,表示它们为正数。在这里,如果C-in为1,我们得到答案的MSB为1表示答案为负(溢出),而C-out为0。C -in  \neq C输出因此溢出。

在第二张图中,两个数字的MSB为1,表示它们为负数。在这里,如果C-in为0,我们得到的答案MSB为0表示答案为正(溢出),而C-out为1。C -in  \neq C输出因此溢出。
读者还可以尝试将C-in C-out和MSB结合使用,以检查溢出情况。

因此,MSB的进位和进位足以检测到溢出。

异或门上方可用于检测溢出。