使用2的补码减去二元分数

时间:2014-01-26 18:23:06

标签: math floating-point binary subtraction twos-complement

我在Stack Overflow中通过不同的帖子关注我的问题,但似乎没有人回答它,因为在他们的问题中,给出了十进制表示(我的不是)或答案对我来说是模糊的(如{ {3}})。

我试图在分数或浮点数中减去二进制数字。

  0.0110
- 0.100101

给出的答案是-0.001101,但未显示解决方案。由于我没有看到任何直接的方式( DEC到BIN)将二进制小数位转换为2的补码,我尝试在2的二进制补码上实现这个this的解决方案分数,其中你得到逐位补码并添加浮点部分(没有解释添加分数部分的背景原理)。使用它,我的答案与指定的答案不符。

  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 :(得分:2)

通过添加一个单位,从一个补码到二个补码。在这种情况下,单位为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.