使用十六进制的二进制补码操作

时间:2013-06-17 00:16:27

标签: assembly hex twos-complement

我无法理解我的学习汇编语言教科书的一部分。它开始介绍在计算机中表示数据的所有方法,以及它涵盖计算机中有符号和无符号数字的点,其中有符号数字是负数或正数。我的书以十六进制执行二进制补码操作,此处根本没有转换为二进制,我在网上看到的只是二进制。我的书说你首先将你的十六进制数字表示为无符号,然后将这个十六进制数减去10000基数16得到字长表示(据说100000000 base 16会得到一个双字)(你减去的数字是,十六进制,a 1后跟表示长度中的0的数字)。

读完之后,试图理解它,它给了我一个例子,例子想要2的补码-76。所以它将它转换为无符号,即4C,然后从10000减去4C(这里的字长)。所以我们有:

10000
  -4C
_____

但是我的书说你不能从0减去C,这是正确的,因为C是12,你不能从0离开12,所以它在左边的路上bar然后离开FFF。为何选择FFF?我认为F是15,而不是0.那么剩下的0怎么转向F?

现在我们有:

FFF 10
 -4  C
______

毕竟,它说: 10基16减C基16 = 16基10减12基10 = 4。 什么? 10基16很好,但它怎么变成16?我知道C是12,你不能得到10减12但没有得到负数,但为什么10变为16? 最后它说F base 16减4 = 15 base 10 - 4 base 10 = 11 base 10 = B base 16 这是有道理的,但不是10变成16.有人可以用十六进制来解释这个问题以及这里发生了什么。

-Dan

此:

________

只是一行

1 个答案:

答案 0 :(得分:1)

要记住的是你在Base 16工作。所以,10 base 16以base 10命名法表示= 1 * 16 ^ 1 + 0 * 16 ^ 0 = 16.基数16的C为12(A = 10,B = 11,C = 12,D = 13,E = 14,F = 15)。所以10(基数16) - C =(在基数10命名法中)16 - 12 = 4(在基数16术语和基数10命名法中)

现在,用“借用”来思考你的问题,如果你有以下基数10减法问题:

 1000
 -  8
 -----
  992

你将其重写为

 99 10 
 -   8
 ------
   992

因为1000 = 9 * 10 ^ 2 + 9 * 10 ^ 1 + 10(900 + 90 + 10)

当你需要借用减法时,这里的F就像9的行为一样

在你的情况下,10000 = 16 ^ 4 = FFF 10 = 15 * 16 ^ 3 + 15 * 16 ^ 2 + 15 * 16 ^ 1 + 16