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 的十六进制补码减法/加法的主要内容,如果未能解决你的问题,请参考以下文章