0

我想使用补码 Octal(24)-Hex(4B) 进行以下减法并给出二进制答案

Octal(24) 是十进制的 20,Hex(4B) 是十进制的 75

20->10100 75->1001011

取 75 0110100 的 1s 补码并加到 20

10100 +0110100 =1001000

添加进位结果为 001000 + 1 =001001 这是错误的

我哪里错了?

我是新来的,如果输入方式有任何错误,请见谅。

4

1 回答 1

0

您的版本中有一些小错误。让我告诉你一个正确的解决方案,然后告诉你你的错误

我们有八进制数 24 和十六进制数 4B。两者都相当容易转换为二进制。

每个八进制数字代表 3 个二进制数字。

 2   4 
+++ +++
010 100

每个十六进制数字代表 4 位数字。

 4    B 
++++ ++++
0100 1011

现在你构建了补码:

~01001011
 ---------
 10110100

您需要添加一个。否则你会得到 2 个零。(+0 => 00000000,-0 => 11111111)。这实际上使它成为一个二进制补码,但除非您在越过 0 边界时想要奇怪的结果,否则它是必需的

 10110100
+00000001
---------
 10110101

现在你的补充完成了。下一步是将两个数字相加

 00010100 #The Octal 24
+10110101 #The complement
---------
 11001001

第一个数字是 1,因此它是负数(正如我们预期的那样,因为我们做了 20 - 75)因此我们需要反转它。

首先我们减去一个:11001000
然后我们再次反转它:00110111
这是十进制的 55。因此 11001001 是十进制的 -55。
20 - 75 = -55
瞧,我们完成了 :)

第一个小提示:将 0x4B (= Hex 4B) 转换为二进制格式时犯了一个小错误。一位数是错误的:)

另外,您忘记添加一个。然后你做了一些我不明白的奇怪的事情:

添加进位结果为 001000 + 1 =001001 这是错误的

此外,您没有使用固定大小的数字,这使您无法确定结果是否为负。我在这里坚持使用 8 位(八进制 -> 二进制转换期间除外)。(请记住,对于 8 位,您的数字范围是从 -127 到 +128。)最后 - 由于您看不到它的负数 - 您没有恢复该过程。

我希望这个解释对你有所帮助:)

于 2013-09-29T17:41:01.003 回答