10

这是我们为课堂提供的图表:

在此处输入图像描述

你为什么不在这张图片中使用 C4 呢?如果 C4 为 1,那么最后的加法导致溢出,这就是我们想知道的。为什么我们需要看C3?

4

3 回答 3

9

溢出标志指示有符号操作的溢出条件。

在签名操作中要记住的几点:

  • MSB 始终保留以指示数字的符号
  • 负数用 2 的补码表示
  • 溢出导致无效操作

二进制补码溢出规则:

  • 如果两个正数之和产生负结果,则和溢出。
  • 如果两个负数之和产生正结果,则和溢出。
  • 否则,总和没有溢出。

例如:

**Ex1:**
 0111   (carry)  
  0101  ( 5)
+ 0011  ( 3)
==================
  1000  ( 8)     ;invalid (V=1) (C3=1) (C4=0)


**Ex2:**
 1011   (carry)  
  1001  (-7)
+ 1011  (−5)
==================
  0100  ( 4)     ;invalid (V=1) (C3=0) (C4=1)


**Ex3:**
 1110   (carry)  
  0111  ( 7)
+ 1110  (−2)
==================
  0101  ( 5)     ;valid (V=0) (C3=1) (C4=1)

在有符号运算中,如果最左边的两个进位位(在这些示例中位于顶行最左侧的位)均为 1 或均为 0,则结​​果有效;如果左两个进位位是“1 0”或“0 1”,则发生符号溢出。方便的是,对这两位进行异或运算可以快速确定是否存在溢出条件。(参考:二进制补码

溢出与进位:溢出可以被认为是进位的二进制补码形式。在有符号操作中,溢出标志被监视并且进位标志被忽略。类似地,在无符号操作中,进位标志被监控​​,溢出标志被忽略。

于 2013-02-03T14:56:32.183 回答
2

当最高有效位的进位不等于进位时,会发生有符号数的溢出。

例如,使用 8 位,65 + 64 = 129 实际上会导致溢出。这是因为这是二进制的 1000 0001,也是 2 的补码的 -127。如果你通过这个例子,你可以看到这是进位不等于进位的结果。

即使进位标志为高,也可以进行正确的计算。

考虑

  1000 1000   = -120
+ 1111 1111   = -1

=(1) 10000111 = -121 

有 1 的进位,但没有溢出。

于 2013-07-16T13:53:05.723 回答
0

对于任何正的自然位数,我想给这个问题一个更一般的答案。

让我们将最后一个进位输出 C1、倒数第二个进位输出 C0、和符号输出 S0 以及 A 和 B 的符号位分别称为 A0 和 B0。

那么以下成立:

  • C1 = A0 + B0 + C0
  • S0 = A0*B0 + A0*C0 + B0*C0

现在让我们来看看这些可能性。

  • 如果C1 == 1有两种可能:
    • if C0 == 0: A0 和 B0 必须都为 1(因此 A 和 B 都必须为负)。这意味着 S0 必须为 0 表示解决方案为正而 A 和 B 为负 => 溢出
    • 如果C0 == 1:要么
      • A en B 有相反的符号,所以不可能溢出。=> 没有溢出
      • A0 和 B0 都是 1(因此 A 和 B 必须都是负数)。这意味着 S0 必须为 1 意味着解决方案是负数 => 没有溢出
  • 如果C1 == 0有两种可能:
    • 如果C0 == 0:要么
      • A0 和 B0 都是 0(因此 A 和 B 必须都是正数)。这意味着 S0 必须为 0 意味着解决方案是正的 => 没有溢出
      • A en B 有相反的符号 => 没有溢出
    • if C0 == 1: A0 en B0 必须都是 0(因此 A en B 必须都是正数)这意味着 S0 必须为 1 意味着解是负数,而 A en B 是正数 => 溢出

希望能帮助那里的人。

于 2018-06-19T16:07:36.840 回答