【问题标题】:Subtraction of binary fractions using 2's complement使用 2 的补码减去二进制分数
【发布时间】:2014-02-17 11:55:48
【问题描述】:

我在 Stack Overflow 上浏览过与我的问题相关的不同帖子,但似乎没有人回答,因为在他们的问题中,要么给出了十进制表示(我的没有),要么答案对我来说很模糊(比如 @ 987654321@).

我正在尝试对小数或浮点中的二进制数字进行减法。

  0.0110
- 0.100101

给出的答案是-0.001101,但没有给出解决方案。由于我没有看到任何直接的方法(not DEC to 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 的错误答案。我做错了什么?我是否忘记了我可以使用的任何原则?

【问题讨论】:

  • 当你写“十进制表示”时,你的意思是“分数表示”吗?
  • 不,我的意思是二进制数的十进制对应物。就像在这个question 中一样。
  • 但在我的情况下,不涉及小数。要减去的纯有符号二进制数。

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


【解决方案1】:

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

【讨论】:

  • 获取1.110011 的补码以获得其负值:将0.001100(@PascualCuoq 答案的 1 的补码)添加到0.000001 确实是-0.0011010.000001部分在我们的讲座中没有教给我们,所以非常感谢!
  • @PascualCuoq,我还有一个问题!如果固定点左侧有高值怎么办?例如,1011.01101。在得到它的一点点反转之后,如果我说我应该添加 0001.00001 以将其转换为它的 2 的补码,我是对的吗?
  • @ellekaie 不,仍然是0000.00001。您可以将其视为添加以 2 的补码 nm 表示的整数,其中 nm 是原始数字中的 1/32 的数字。如果你这么看,自然要加上0000.00001,把一个补码转换成二进制补码。
  • 感谢您的回答.. 但只是想澄清一下.. 是0.00001 还是0.000001?您的答案有五个零,但根据您的评论,它是四个 .. 它是否取决于小数部分的长度? @PascalCuoq。谢谢
  • @severinolorillajr 我的回答回复了问题,我的评论回复了评论。据我所知,它们都是正确的。
猜你喜欢
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多