我的Ones补充有什么问题?

时间:2013-09-29 17:02:43

标签: binary decimal twos-complement complement ones-complement

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

八进制(24)是20位小数 和十六进制(4B)是十进制的75

20→; 10100 75-> 1001011

获得75的1s补充 0110100并添加到20

10100 0110100 = 1001000

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

我哪里错了?

我是新来的,对不起,如果输入的方式有任何错误。

1 个答案:

答案 0 :(得分:1)

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

我们有八进制数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。)最后 - 因为您没有看到它的负数 - 您没有恢复该过程。

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