在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
的错误答案。我做错了什么?我是不是忘了什么我本可以用的原则?
一个加一个单位,从一个补语到二个补语。在本例中,该单元是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.