首页 文章

二进制补码检测进位溢出

提问于
浏览
2

如果我使用Two's Complement方法添加两个带符号的二进制数,为什么它自动意味着如果进入MSB(符号)和执行不相同的情况下溢出已经发生?

1 回答

  • 0

    让我们把一个事实排除在外 .

    当我们添加负操作数和正操作数时,结果将始终在表示范围内 . 当我们添加两个具有相同符号的数字(正数或两者都为负数)且结果符号相反时,就会发生溢出 .

    当我们在二进制补码中添加数字时,我们将第一个操作数的符号位与第二个操作数的符号位相加 .


    当我们添加正正操作数时,符号位的总和为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溢出!

相关问题