有一种特殊的方法可以将小数(带有小数点,如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。
出于某种原因,它现在取反方向,它是110,它神奇地变成了6。我不明白为什么最低有效除法(1除以2)的剩余部分现在被用在答案的最高有效位上,这是可行的。
同样困惑的是为什么右侧的方法是有效的。
关于这个将十进制转换为二进制的特殊过程,有没有人可以分享一些直觉?同样,我没有问题执行计算,因为计算是相当简单的。我就是不明白为什么这样行得通。
发布于 2019-08-03 10:49:57
你可以这样想:
二进制表示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的正幂。因此,除以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)
或者用二进制编写(没有2的幂):b_n, b_(n-1), .., b_1。
现在我们得到一个新的数字,和以前一样,最低有效位被丢弃了,所有的东西都向右移动了。因此,我们可以使用k/2重新开始整个过程,以获得b_1。然后是b_2。诸若此类。
这里我将余数和除法分开,以使其更清晰,但如果你愿意,你可以同时做这两件事,这是一样的。
我希望你能看到,在这个过程中,我们是如何从右到左得到这些比特的,这就是为什么你想要在最后翻转整个东西,如果你一直从左到右写下来的话。
https://stackoverflow.com/questions/57334956
复制相似问题