我做了很长的帖子,但我会保持简单。
有人可以一步一步地向我显示十六进制-10 + -10的有符号16位吗?
十六进制数字看起来像0xFFF6 + 0xFFF6
我听说它应该等于0xFFEC,它应该是-20。任何人?好吗?
答案 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)