math - 使用 2 的补码进行二进制分数减法

标签 math floating-point binary subtraction twos-complement

我在 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/

相关文章:

java - 如何定位列表中的每个第 n 个元素,但仅在 3 个之后

math - float 学有问题吗?

Python:旋转矩阵到角度

algorithm - 黑盒计数到 19 只有 2 位,并且只能切换?

algorithm - 求所有 n 位二进制数,其中 r 个相邻数字为 1

math - 合并两个集合的协方差以创建新的协方差

objective-c - 将整数除以 float 时结果不正确

c++ - 对于浮点值 a : Does a*0. 0 == 0.0 对于 a 的有限值总是求值为真?

floating-point - 为什么 float 和 double 不在控制台上打印?

javascript - 如何使用javascript将base64转换为二进制流?