我在 Stack Overflow 上浏览过与我的问题相关的不同帖子,但似乎没有人回答这个问题,因为在他们的问题中,要么给出了十进制表示形式(我的没有给出),要么答案对我来说很模糊(比如 this )。
我正在尝试对分数或 float 中的二进制数字进行减法。
0.0110
- 0.100101
给出的答案是-0.001101
,但没有显示解决方案。由于我还没有看到任何直接方法(不是 DEC 到 BIN)将二进制小数数字转换为其 2 的补码,因此我尝试在二进制分数的 2 补码上实现此 lecture 的解决方案,其中您得到逐位求补并加上浮点部分(小数部分相加的背景原理没有解释)。使用它,我的答案与指示的不匹配。
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.
关于math - 使用 2 的补码进行二进制分数减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21367400/