2014-10-27 80 views
1

我做了一个很长的文章,但我会保持简单。快速2的补码减法/加法十六进制

有人能给我看一步一步的-10 + -10十六进制的有符号16位吗?

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

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

回答

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 

减法

添加负相同减去正的。通过取减数的二进制补码将-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)