快速2的补码减法/加法十六进制

时间:2014-10-27 08:01:26

标签: binary hex computer-science

我做了很长的帖子,但我会保持简单。

有人可以一步一步地向我显示十六进制-10 + -10的有符号16位吗?

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

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

1 个答案:

答案 0 :(得分:0)

<强>加成

添加两个数字时,请使用按地点值添加数字的常用方法。

   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)