0

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

在阅读并尝试理解它之后,它给了我一个例子,而例子需要 -76 的 2 补码。因此它将它转换为无符号数,即 4C,然后从 10000(此处为字长)中减去 4C。所以我们有:

10000
  -4C
_____

但是我的书说你不能从 0 中减去 C,这是真的,因为 C 是 12,你不能从 0 中减去 12。所以它在左边的路上把 1 推到一边,然后离开 FFF。为什么选择 FFF?我以为F是15,而不是0。那么剩下的0怎么变成F呢?

现在我们有:

FFF 10
 -4  C
______

毕竟,它说:10 base 16 - C base 16 = 16 base 10 - 12 base 10 = 4。什么?10 base 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。有人可以用十六进制来解释这是怎么回事这里。

-担

这个:

________

只是一条线

4

1 回答 1

1

要记住的是,您正在使用 Base 16。因此,10 base 16 以 base 10 命名法表示 = 1 *16^1 + 0 * 16^0 = 16。base 16 中的 C 是 12(A=10, B=11,C=12,D=13,E=14,F=15)。所以 10(base 16) - C = (在 Base 10 命名法中) 16 - 12 = 4 (在 base 16 命名法和 base 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

于 2013-06-17T00:41:19.823 回答