【问题标题】:Quick 2's Complement Subtraction/Addition in hexadecimalQuick 2 的十六进制补码减法/加法
【发布时间】:2014-12-22 08:58:17
【问题描述】:

我发了一篇很长的帖子,但我会保持简单。

有人可以逐步向我展示 -10+-10 的十六进制签名 16 位吗?

十六进制数字看起来像 0xFFF6+0xFFF6

我听说它应该等于 0xFFEC,应该是 -20。任何人?漂亮吗?

【问题讨论】:

    标签: binary hex computer-science


    【解决方案1】:

    加法

    将两个数字相加时,使用通常的按位值相加的方法。

       0xFFF6  (-10)           0xFFF  6    (6)
     + 0xFFF6  (-10)    >>   - 0xFFF  6    (6)
    -----------------       ------------ ------
                                      C   (12)
    

    需要时携带。

                                                       1  <-- Carried
       0x F F  F 6   (15)                         0x F F F 6
     - 0x F F  F 6   (15)           >>          - 0x F F F 6
    --------------- ------                     --------------
              1E C   (30)                                E C
              ^        +-- need to carry 16
              |
    Carry this to next place value
    

    继续直到计算完所有数字。丢弃溢出进位。使用符号检查溢出。

             1                   1 1
        0x F F F 6            0x F F F 6            0xFFF6  (-10)
      - 0x F F F 6    >>    - 0x F F F 6    >>    - 0xFFF6  (-10)
     --------------        --------------        -----------------
            1F E C              1F F E C            0xFFEC  (-20)
                                ^
                                |
                             Discard
    

    减法

    添加负数与减去正数相同。通过取减数的 2 的补码,将 -10 + -10 转换为 -10 - 10

       0xFFF6  (-10)                            0xFFF6  (-10)
     + 0xFFF6  (-10)   >> 2's complement >>   - 0x000A  (+10)
    -----------------                        -----------------
    

    接下来,根据需要使用二进制减法和借位。

         Borrow                        Borrowed
           |                              |
           v                              v
       0xFFF  6   (  6)            0xFFE  16   ( 22)
     - 0x000  A   (-10)    >>    - 0x000   A   (-10)
    ------------ -------        ------------- -------
    

    继续直到计算完所有数字。

        0xFFE  16   ( 22)            0xFFE  16            0xFFF6
      - 0x000   A   (-10)    >>    - 0x000   A    >>    - 0x000A
     ------------- -------        -------------        ----------
                C   ( 12)            0xFFE   C            0xFFEC
    

    溢出

    完成后,检查是否溢出。如果发生溢出,符号将不正确(减去负数必须是负数)。

    0xFFEC  ->  negative (no overflow)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2014-04-16
      相关资源
      最近更新 更多