Math 溢出的确切含义是什么?

Math 溢出的确切含义是什么?,math,assembly,integer,overflow,twos-complement,Math,Assembly,Integer,Overflow,Twos Complement,对于溢出的含义,我已经阅读了两个定义 假设我们添加了以下内容: 11111111 00000001 -------- 100000000 我读到的第一个定义是,结果不适合8位,在本例中它需要9位,因此这称为溢出 我读过的另一个定义是,如果我们对两个有符号整数进行加法,那么两个是补码整数,例如: 10011001 10111011 -------- 101010100 然后,如果8位结果01010100的符号与两个整数的符号不同,并且在本例中不同,则这称为溢出 哪个定义是正确的?它

对于溢出的含义,我已经阅读了两个定义

假设我们添加了以下内容:

 11111111
 00000001
 --------
100000000
我读到的第一个定义是,结果不适合8位,在本例中它需要9位,因此这称为溢出

我读过的另一个定义是,如果我们对两个有符号整数进行加法,那么两个是补码整数,例如:

 10011001
 10111011
 --------
101010100
然后,如果8位结果01010100的符号与两个整数的符号不同,并且在本例中不同,则这称为溢出


哪个定义是正确的?

它们都是正确的。当对数字的计算由于结果不再符合数字的存储格式而导致错误时,会发生溢出

因此,在第一种情况下,发生溢出是因为您需要9位,而只有8位可用,这意味着现在存储在字节中的数字不能准确反映答案


在第二种情况下,发生溢出是因为结果干扰了有符号位,也导致字节包含不正确的值。

它们都是正确的。当对数字的计算由于结果不再符合数字的存储格式而导致错误时,会发生溢出

因此,在第一种情况下,发生溢出是因为您需要9位,而只有8位可用,这意味着现在存储在字节中的数字不能准确反映答案


在第二种情况下,会发生溢出,因为结果会干扰有符号位,也会导致包含不正确值的字节。

这两种情况都可以通过向结果中添加一位来解决。 如上所述,当操作结果不适合目标寄存器/变量时,会发生整数溢出。例如,0x10000*0x10000也是32位整数的溢出


典型的处理器架构将无符号整数溢出与有符号整数溢出的情况分离为状态寄存器中的两个不同标志;进位/借位用于无符号,溢出用于有符号加法。

这两种情况都可以通过在结果中再添加一位来解决。 如上所述,当操作结果不适合目标寄存器/变量时,会发生整数溢出。例如,0x10000*0x10000也是32位整数的溢出


典型的处理器架构将无符号整数溢出与有符号整数溢出的情况分离为状态寄存器中的两个不同标志;进位/借位用于无符号,溢出用于有符号加法。

第一个定义是base。第二个是后效,它们实际上是相同的东西,一个是有符号的,另一个是无符号溢出,你应该这样想。在这两种溢出情况下,它只是意味着您没有足够的位来正确表示结果。基本上你还需要一点。第一个定义是base。第二个是后效,它们实际上是相同的东西,一个是有符号的,另一个是无符号溢出,你应该这样想。在这两种溢出情况下,它只是意味着您没有足够的位来正确表示结果。基本上,您还需要一个位。'Resulted in a error'可能会误导某些读者,因为CF OF&AF标志中的转换仅指示先前操作的结果。假设X86中的错误是我们正在讨论的体系结构,那么它将抛出一个异常。我的意思是数学错误,而不是运行时错误。在Z80中,这两种情况都触发了CPU中的标志,可以对其进行测试,以确定是否发生了溢出。“导致错误”对于某些读者来说可能是误导性的,因为CF OF&AF标志中的转换仅指示先前操作的结果。假设X86中的错误是我们正在讨论的体系结构,那么它将抛出一个异常。我的意思是数学错误,而不是运行时错误。在Z80中,这两种情况都触发了CPU中的标志,可以对其进行测试以查看是否发生了溢出。