我在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
的错误答案。我做错了什么?我是否忘记了我可以使用的任何原则?
答案 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.