溢出意味着什么?

Ste*_*eve 1 math assembly integer overflow twos-complement

我已经读了两个关于溢出意味着什么的定义.

假设我们有以下添加:

 11111111
 00000001
 --------
100000000
Run Code Online (Sandbox Code Playgroud)

我读过的第一个定义是结果不适合8位(在本例中需要9位)的事实,然后这称为溢出.


我读过的另一个定义是,如果我们有两个有符号整数的加法(例如两个补码整数):

 10011001
 10111011
 --------
101010100
Run Code Online (Sandbox Code Playgroud)

然后,如果8位result(01010100)的符号与两个整数的符号不同(在本例中它是不同的),那么这称为溢出.

哪个定义是正确的?

Aki*_*nen 6

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

典型的处理器体系结构将无符号整数溢出与有符号整数溢出的情况分离为状态寄存器中的两个不同标志; 携带/借用无符号和溢出以进行签名添加.


Rob*_*ony 5

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

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

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