【问题标题】:Binary Subtraction with 2's Complement带 2 补码的二进制减法
【发布时间】:2013-01-20 21:54:55
【问题描述】:

我需要帮助使用 2 表示的二进制减去每个数字使用 5 位:

1) -9 -7 = ?有溢出吗?

-9 = 01001(2 的补码 = 10111)和 -7 = 00111(2 的补码 = 11001)

现在我们需要添加,因为我们使用的是 2 的补码

10111 +11001 = 100000 但是这个答案没有意义。另外,我假设有溢出,因为答案中有超过 5 位。

2) 6 - 10,与之前相同的过程。负二进制数对我来说没有意义

【问题讨论】:

  • 技术上不是编程问题。
  • 预期的答案是什么?它将如何在 2s 补码中表示?它符合提供的数字吗?
  • 使用 8 位而不是 5 位,以避免混淆。这种方法肯定会有所帮助。 -9(binary) : 0000 1001 & -9(2's complement) : 1111 0111-7(binary) : 0000 0111 & -7(2's complement) : 1111 1001。现在添加这两个:1111 0111 +1111 1001 将产生 1 作为进位和 1111 0000 作为输出。 1111 0000中最左边的1,表示输出为-(negative)。所以现在取输出的补码并将1 添加到它。那是你的二进制答案。您的问题可以推断为:(-9)-(+7)。所以你不必浪费时间去推断-7的2的补码。

标签: binary subtraction twos-complement


【解决方案1】:

1) -9 - 7

-9 - 7 = -9 + -7

9(二进制)= 01001
-9(2 的补码)= 10111
7(二进制)= 00111
-7(2 的补码)= 11001

 10111 +
 11001 =
110000

这不适合 5 位。去除溢出我们得到 10000,即 -16(二进制)。

2) 6 - 10

6 - 10 = 6 + -10

6(二进制)= 00110
10(二进制)= 01010
-10(2 的补码)= 10110

 00110 +
 10110 =
 11100

这适合 5 位并且是 -4(二进制)。

【讨论】:

  • 我通过 2 的补码理解计算机存储负数。我想知道如果6 - a, where a == -10-(-10)这个过程是怎么发生的?它是否试图获得 -10 (10110) 的 2 补码?
  • @WeishiZeng 我不知道真正的处理器是如何做到的。我喜欢将x - y 转换为x + -y,因为这样我就不需要记住用于减去二进制数的单独算法。如果您有00110 - 10110,则变为00110 + -1011000110 + 0101010000,即-16。所以是的,我只是通过翻转所有位并添加 1 来取 10110 的 2 的补码。
【解决方案2】:

10111 + 11001 不是 100000 而是 110000。

   1111
   10111
 + 11001
   -----
  110000

【讨论】:

    【解决方案3】:

    第一个问题的答案是错误的。要使用二进制补码找到 -9-7,我们需要按照以下步骤操作:

    STEP:1 第一个数字的转换
    
    第1次9的二进制转换:01001
    
    第二次找到二进制的补码:10110
    
    二进制补码加 1:10110
                                           +1
                                        -----
                                        10111
    第 2 步:转换第二个数字
    
    第1次7的二进制转换:00111
    
    第二次找到二进制的补码:11000
    
    二进制补码加 1:11000
                                           +1
                                       --------
                                        11001
    第 3 步:添加
    
    现在添加两个输出 -9 + (-7):10111
                                       +11001
                                      --------
                                       110000
    最重要的是检查答案是否正确。
    您可以对二进制数字使用索引:7 6 5 4 3 2 1 0
                                                       1 1 0 0 0 0
    
    找到每个具有 1 位数字的指数的 2 次幂。
                                                    (-)2^5 + 2^4

    *使用注 (-) 是因为在二进制补码中,最高有效位(具有最高索引的位)是符号位 -2^5 + 2^4 = -32 + 16 = -16 这是 -9-7=-16 的正确答案。因此,2 的补码成为表示负数的流行方式。对于符号幅度,我们需要假设一个符号位,这在计算机中很难实现,对于 1 的补码,我们需要加 1 才能找到正确的答案。

    【讨论】:

      猜你喜欢
      • 2012-09-21
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 2014-02-17
      相关资源
      最近更新 更多