Math 使用2'对二进制分数进行减法;补语

Math 使用2'对二进制分数进行减法;补语,math,floating-point,binary,subtraction,twos-complement,Math,Floating Point,Binary,Subtraction,Twos Complement,我在Stack Overflow中读过很多关于我的问题的帖子,但似乎没有人回答,因为在他们的问题中,要么给出了十进制表示(我的不是),要么答案对我来说很模糊(比如) 我试着用分数或浮点对二进制数字进行减法 0.0110 - 0.100101 给出的答案是-0.001101,但未显示解决方案。由于我还没有看到任何直接的方法(notDEC-to-BIN)将二进制分数位数转换为其2的补码,因此我尝试在二进制分数的2补码上实现此解决方案,其中您可以获得逐位补码并添加浮点部分(没有解释添加小数部分的

我在Stack Overflow中读过很多关于我的问题的帖子,但似乎没有人回答,因为在他们的问题中,要么给出了十进制表示(我的不是),要么答案对我来说很模糊(比如)

我试着用分数或浮点对二进制数字进行减法

  0.0110
- 0.100101
给出的答案是
-0.001101
,但未显示解决方案。由于我还没有看到任何直接的方法(notDEC-to-BIN)将二进制分数位数转换为其2的补码,因此我尝试在二进制分数的2补码上实现此解决方案,其中您可以获得逐位补码并添加浮点部分(没有解释添加小数部分的背景原理)。使用该方法,我的答案与所示的答案不匹配

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

最后,我得到了错误的答案
0.0011
。我做错了什么?我忘记了我本可以使用的任何原理吗?

一个补码加一个单位变成两个补码。在这种情况下,单位是
0.000001
,而不是
1
(整数是
1
,但您使用的不是整数而是
0.000001
的倍数)


1.011010当你写“十进制表示法”时,你的意思是“分数表示法”?不,我的意思是二进制数的十进制对应项。就像这样。但在我的例子中,不涉及十进制。要减去的是纯有符号二进制数。获取两个数的补数
1.110011
以获得其负值:添加
0.001100
(1的@PascualCuoq答案的comp)to
0.000001
确实是
-0.001101
!在我们的讲座中,
0.000001
部分没有教给我们,所以非常感谢!@PascualCuoq,我还有一个问题!如果定点左侧有高值怎么办?例如,
1011.01101
。在得到其逐位反转后,如果我说我应该加上
0001.00001
,把它转换成2的补码?@ellekaie不,仍然是
0000.00001
。你可以把它看作是在2的补码
n
m
中添加整数,其中
n
m
是原始数的1/32。如果你看到它,这是y、 添加
0000.00001
将一个补码转换为两个补码是很自然的。谢谢你的回答..但我想澄清..是
0.00001
还是
0.000001
?你的答案有五个零,但在你的评论中是四个..这取决于小数的长度吗?@PascalCuoq。Thanks@severinolorillajr我的回答回答了问题,我的评论回答了一条评论。据我所知,它们都是正确的。
  0.011000
+ 1.110100
__________
 10.001100 <- discard overflow '1'            
  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.