这个十六进制减法问题怎么办?

时间:2019-01-13 15:25:04

标签: binary hex base subtraction

我正在练习十六进制减法,并且我似乎陷入了这个问题:

0B -74

有人可以解释如何执行此计算吗?十六进制的答案是-69,但我似乎不明白为什么。我应该尝试将其转换为二进制数还是以10为基数的数字来帮助解决此问题?

2 个答案:

答案 0 :(得分:2)

0x0B-0x74 = 0x0B +(-0x74),我们从小学就知道。

二进制补码告诉我们

-0x74 =(〜0x74)+ 1。

因此,CPU可以通过以下方式解决它:

          1
   00001011
+  10001011
============

完成它的填充,就像小学一样,但是因为它是基数2而更容易。

  000010111
   00001011
+  10001011
============
   10010111

进位和进位msbit匹配,因此答案合适。 0x97这是 -(0x68 + 1)= -0x69。

还请注意,如果它是0x00B-0x074,它仍然有效

              1
   000000001011
+  111110001011
===============

结果为0xF97,即-0x069。完美的互补。

(将数字取二的补码取反的一种方法是取反(一个补码)并加一个)

您不必完全转换基数,就可以像以10或2为基数一样轻松地进行16基数学运算。如果我们想从年级中减去数字,则必须从较小的数中取最大数。

  74
- 0B
======

b大于4,所以我们必须借用

   1
  64
- 0B
======
   9

0x14-b = 0x9。

   1
  64
- 0B
======
  69

0x6-0x0 = 0x6。

因为我们必须翻转数字,因为0x74大于0x0b,所以我们将结果-0x69取反。

没有魔术。小学数学。

答案 1 :(得分:1)

0x0B-0x74 = 11-116 = -105(-0x69)

在十进制11-116中,第二个值更大,所以我改为-(116-11)翻转值=-(105)= -105。

在hexa中,您可以执行相同的-(0x74-0x0B),现在对于第一个(最低有效)数字0x4-0xB再次太多,因此借用一个=> 0x14-0x0B(20-11)= 9(一个找到数字)。现在第二个数字:0x7-0x0-借位= 0x7-0x1 = 0x6 =>全值0x69,正等待结果的符号翻转= -0x69

并验证结果:

-0x69 + 0x74 = 0x0B(注意-0x9 + 0x4实际上是0xB(11),因为您是从4乘9向下,即3、2、1、0(-4完成),然后是F (!),E,D,C,B(总和为-5 = -9)。如果您习惯于使用小数,则可能始终难以记住“以16为底”。