提问者:小点点

用2's补对二进制分数的减法


在Stack Overflow中,我已经看过了不同的帖子,这些帖子与我的问题有关,但似乎没有一个回答它,因为在他们的问题中,要么给出了十进制表示(我的没有),要么答案对我来说很模糊(像这样)。

我试着用分数或浮点数做二进制数字的减法。

  0.0110
- 0.100101

给出的答案是-0.001101,但未显示解决方案。由于我还没有看到任何直接的方法(不是DEC到BIN)来将二进制小数数字转换为其2的补码,所以我尝试实现了这堂课中关于二进制小数的2的补码的解决方案,其中您得到逐位补码并添加浮点部分(未解释添加小数部分的背景原理)。用这个方法,我的答案与所示的不匹配。

  1.011010 <- 1's complement of 0.100101
+ 0.011010
__________
  1.110100 <- 2's complement of 0.100101

然后将2的补码添加到0.0110:

  0.011000
+ 1.110100
__________
 10.001100 <- discard overflow '1'            

我最终得到了0.0011的错误答案。我做错了什么?我是不是忘了什么我本可以用的原则?


共1个答案

匿名用户

一个加一个单位,从一个补语到二个补语。在本例中,该单元是0.000001,而不是1(对于整数,它是1,但是您不是在处理整数,而是在处理0.000001的倍数)。

  1.011010 <- 1's complement of 0.100101
+ 0.000001
__________
  1.011011 <- 2's complement of 0.100101

加法变为:

  0.011000
+ 1.011011
__________
  1.110011 <- 1.110011 is the two's complement of the absolute value of the answer.