如果我使用Two's Complement方法添加两个带符号的二进制数,为什么它自动意味着如果进入MSB(符号)和执行不相同的情况下溢出已经发生?
让我们把一个事实排除在外 .
当我们添加负操作数和正操作数时,结果将始终在表示范围内 . 当我们添加两个具有相同符号的数字(正数或两者都为负数)且结果符号相反时,就会发生溢出 .
当我们在二进制补码中添加数字时,我们将第一个操作数的符号位与第二个操作数的符号位相加 .
当我们添加正正操作数时,符号位的总和为0 .
0XXX (positive) + 0XXX (positive) ------ 0XXX (positive)
这意味着无论发生什么都没关系,在添加正面正操作数时永远不会有进位 .
所以,如果有一个随身携带的符号位
1 0XXX (positive) + 0XXX (positive) ------ 1XXX (negative)
携带位1将成为结果的标志 . 这意味着我们添加了两个正操作数,结果我们得到了一个负数 .
进位= 0进位标志位= 1 OVERFLOW!
当我们添加负负操作数时,符号位的总和为0且带有进位 .
1XXX (negative) + 1XXX (negative) ------ 10XXX (positive)
这意味着无论发生什么都没关系,在添加负负操作数时总会有进位 . 请注意,通过“默认”,结果将是正数 . 它“需要”随身携带将结果调整为与操作数相同的符号 . 如果符号位中有一个进位,我们将有两个负操作数,结果为负 .
所以,如果 no 携带到符号位
0 1XXX (negative) + 1XXX (negative) ------ 10XXX (positive)
随身携带位0将成为结果的符号 . 这意味着我们添加了两个负操作数,结果我们得到了一个正数 .
执行= 1进位符号位= 0溢出!
1 回答
让我们把一个事实排除在外 .
当我们添加负操作数和正操作数时,结果将始终在表示范围内 . 当我们添加两个具有相同符号的数字(正数或两者都为负数)且结果符号相反时,就会发生溢出 .
当我们在二进制补码中添加数字时,我们将第一个操作数的符号位与第二个操作数的符号位相加 .
当我们添加正正操作数时,符号位的总和为0 .
这意味着无论发生什么都没关系,在添加正面正操作数时永远不会有进位 .
所以,如果有一个随身携带的符号位
携带位1将成为结果的标志 . 这意味着我们添加了两个正操作数,结果我们得到了一个负数 .
当我们添加负负操作数时,符号位的总和为0且带有进位 .
这意味着无论发生什么都没关系,在添加负负操作数时总会有进位 . 请注意,通过“默认”,结果将是正数 . 它“需要”随身携带将结果调整为与操作数相同的符号 . 如果符号位中有一个进位,我们将有两个负操作数,结果为负 .
所以,如果 no 携带到符号位
随身携带位0将成为结果的符号 . 这意味着我们添加了两个负操作数,结果我们得到了一个正数 .