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

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于Quick 2 的十六进制补码减法/加法的主要内容,如果未能解决你的问题,请参考以下文章

在定点二进制运算器中,减法运算一般通过什么来实现

化减为加:十进制的「补码」

如何用adc的芯片来强化学习——二进制的补码

二进制(signed or unsigned)补码

用同余理解补码

二进制的原码、补码、反码详解