【问题标题】:4-bit Two's complement overflow4 位二进制补码溢出
【发布时间】:2021-10-27 19:12:28
【问题描述】:

我有一个我无法理解的概念性(ish)问题。我有一个作业,它告诉我选择以下 4 位二进制(2 的补码)加法中的哪一个会导致溢出。以下是:

  • A. 1011+1001
  • 乙。 1100+1101
  • C. 0111+1000
  • D. 1010+0110

对于 A,我得到 10100,对于 B,我得到 11001,对于 C,我得到 1111,对于 D,我得到 10000。

显然只有一个答案,但 A、B 和 D 都会产生溢出。它们最终以 5 位而不是 4 位结束。当我问教练他是否想说其中哪一个不会产生溢出时,但他说问题是正确的。他给了我这个提示:

对于 4 位无符号数,溢出意味着 2 个数的和不能用无符号位表示。对于 4 位 2 的补码,溢出是指两个数字的和不能用 4 位 2 的补码表示。

但这对我没有帮助,因为这已经是我的理解了 - 对于 A、B、D,总和无法用 4 位 2 的补码表示。我做错了什么?

【问题讨论】:

    标签: binary twos-complement


    【解决方案1】:

    对于二进制补码表示,表示的最高位具有负值:-(2k-1) 而不是 2k-1 表示 ak 位表示。这意味着当您添加它们时,您不能只查看顶部全加器的进位(示例中的第 5 位输出)——您需要将其与进位进行比较 in 到最高位,如果两个进位不同,你只会得到溢出。这里实际发生的是您减去进位到最高位,而不是添加它。

    所以要更详细地查看示例 B:

    first value     1 1 0 0
    second value    1 1 0 1
    carry value    1 1 0 0
    result          1 0 0 1
    

    所以在这种情况下,进位 in 到符号位与进位相同,所以没有溢出——1001 的 4 位 2s 补码结果是正确的。

    【讨论】:

      【解决方案2】:

      您必须忽略第五位。我们正在计算模 16,仅使用 4 位。

      • A -5 + -7 = -12 但结果为 4
      • B -4 + -3 = -7
      • C 7 + -8 = -1
      • D -6 + 6 = 0

      所以溢出发生在 A.

      第五位不存在。 它在处理器中会是一个类似于溢出进位标志的东西。

      只有当两个术语的符号相同时才会发生溢出:sign1 xor sign2 = 0。结果具有不同的符号。 在处理器中,通常有一个符号标志和这样一个溢出标志。

      逻辑:两个低于 -8 的负数,或两个高于 7 的正数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 2017-07-17
        • 2021-12-21
        • 2015-12-24
        • 2021-02-24
        相关资源
        最近更新 更多