我想使用补码进行以下减法 八进制(24)-Hex(4B)并给出二进制答案
八进制(24)是20位小数 和十六进制(4B)是十进制的75
20→; 10100 75-> 1001011
获得75的1s补充 0110100并添加到20
10100 0110100 = 1001000
添加带有结果的进位 001000 + 1 = 001001这是错误的
我哪里错了?
我是新来的,对不起,如果输入的方式有任何错误。
答案 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。)最后 - 因为您没有看到它的负数 - 您没有恢复该过程。
我希望这个解释帮助你:)