【问题标题】:Why reverse the remainder during decimal to binary conversion?为什么在十进制到二进制转换期间反转余数?
【发布时间】:2019-12-11 13:58:03
【问题描述】:

有一种特殊的方法可以将十进制数(带有小数点,例如 xx.xx)转换为二进制数。详细在这里:https://www.geeksforgeeks.org/convert-decimal-fraction-binary-number/

我可以应用此过程,但无法理解它为何有效。

基本上,它计算小数点左侧和右侧分开 - 这部分我没有问题。 例如,如果我们有 6.9,它将从计算左侧开始:6。

6 除以 2 得到 3,余数为 0。

3 除以 2 得到 1,余数为 1。

1 除以 2 得到 0,余数为 1。

由于某种原因,它现在取 this 的 REVERSE,即 110,而 this 神奇地变成了 6。 我不明白为什么最低有效除法的余数(1 除以 2)现在用在答案的最高有效位中,而这在某种程度上是有效的。

同样对右侧的方法有效的原因感到困惑。

对于将小数转换为二进制的特定过程,是否有人可以分享一些直觉?同样,我执行计算没有问题,因为计算很容易。我只是不明白为什么会这样。

【问题讨论】:

    标签: math binary


    【解决方案1】:

    这样想:

    二进制表示b_n, b_(n-1), .., b_0(右边的最低有效位)表示数字

    k = b_n*2^n + b_(n-1)*2^(n-1) + ... + b_0*2^0(记住 2^0 只是 1)。

    要获得最低有效位,您想知道这个数字是否均分为 2,因为如果不是,那么您知道 b_0 == 1 因为所有其他项肯定是均分的,因为它们都有一些正数前面2的幂。因此除以二的余数是b_0。暂时不要除法,只取余数并写下来。

    现在我们想摆脱最后一点并重新开始以获得下一点。我们怎样才能做到这一点?只需将 k 除以 2。因为那样你会得到:

    k/2 = b_n*2^(n-1) + b_(n-1)*2^(n-2) + ... + b_1*2^0(将总和中的每一项除以 2,从而降低幂。最后一项消失了,因为它不是 0 就是 1,除以 2 时都为 0)

    或者用二进制写成(没有二的幂):b_n, b_(n-1), .., b_1。

    现在我们得到了一个新数字,它与之前的最低有效位已被丢弃并且所有内容都向右移动时完全相同。所以我们可以用k/2重新开始整个过程​​,得到b_1。然后b_2。以此类推。

    这里我把取余数和除法分开了,这样更清楚,但如果你愿意,你可以同时做,这是一回事。

    我希望你能看到,在这个过程中,我们是如何从右到左获取位的,这就是为什么如果你一直从左到右写下来,你想最后翻转整个事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2011-01-10
      • 2010-12-08
      • 2018-06-02
      • 2020-11-06
      相关资源
      最近更新 更多