1
我做了一个很长的文章,但我会保持简单。快速2的补码减法/加法十六进制
有人能给我看一步一步的-10 + -10十六进制的有符号16位吗?
的十六进制数字看起来像0xFFF6 + 0xFFF6
我听说它应该等于0xFFEC这应该是-20。任何人?请好吗?
我做了一个很长的文章,但我会保持简单。快速2的补码减法/加法十六进制
有人能给我看一步一步的-10 + -10十六进制的有符号16位吗?
的十六进制数字看起来像0xFFF6 + 0xFFF6
我听说它应该等于0xFFEC这应该是-20。任何人?请好吗?
加成
当添加两个数字,使用由位值添加位数的通常的方法。
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)