我读过关于溢出的两个定义。
假设我们增加了以下内容:
11111111
00000001
--------
100000000
我读过的第一个定义是,结果不适合8位(本例中需要9位),这就是所谓的溢出。
我读过的另一个定义是,如果我们对两个有符号整数(例如,两个补整数)有一个加法:
10011001
10111011
--------
101010100
然后,如果8位结果(01010100
)的符号与两个整数的符号不同(在本例中是不同的),则称为溢出。
哪个定义是正确的?
发布于 2017-07-26 10:29:49
这两种情况都可以通过多加一点来解决。由于针对Integer溢出的Wikipedia页面状态,当操作结果不适合目标寄存器/变量时,就会发生整数溢出。例如,0x10000 * 0x10000也是32位整数的溢出。
典型的处理器体系结构将无符号整数溢出与有符号整数溢出的情况分离为状态寄存器中的两个不同的标志;进位/借用表示无符号,溢出用于有符号加法。
发布于 2017-07-26 10:06:49
他们都是对的。当对数字的计算由于结果不再符合该数字的存储格式而导致错误时,会发生溢出。
因此,在第一种情况下,发生溢出是因为您需要9位,并且只有8位可用(这意味着现在存储在字节中的数字不能准确地反映出答案)。
在第二种情况下,发生溢出是因为结果干扰有符号的位,还导致字节包含不正确的值。
https://stackoverflow.com/questions/45334342
复制相似问题