好的,因此在研究系统编程时,我已经跳到了浮点数上。我很高兴掌握这些知识,因为这将有助于更快地学习其他语言。不幸的是:我被卡住了,尤其是十进制的5.875,并将其转换为浮点数。
我已经使用的直观方法是将每个数字除以2(取决于我在哪里),因此,我将5除以2得到余数1。 我将8除以2得到余数0。 我将7除以2,得到余数1。 最后,将5除以2,得到的余数1。 。等待它。 。 。
1.011
因此,我检查了在线转换器,答案实际上是101.111。 我不确定为什么会这样,所以我去谷歌搜索正确的数学,并且至少有六种不同的数学解释都处理不同的小数表示形式。
很显然,我的数学是错误的:如何正确地将小数转换为二进制并通过扩展浮点数?我已经知道二进制表示形式如何转换为浮点表示形式,但是我对使用浮点数的十进制表示形式如何转换为二进制表示形式有些困惑。
答案 0 :(得分:3)
101.111(作为二进制数字)表示1•2 2 + 0•2 1 + 1•2 0 + 1•2 −1 + 1•2 −2 + 1•2 -3 = 4 + 0 + 1 +½+¼+ + = 5 + .5 + .25 + .125 = 5.875。
这里没有浮点数。
将十进制数字转换为二进制的过程不是检查单个数字以查看它们是否是偶数和奇数。通常,将整数部分(5)和小数部分(.875)分别转换。整数部分的算法为:
例如,您的电话号码为5:
分数算法是:
例如,使用.875:
这些算法正确的原因有数学上的原因,可以根据需要进行详细说明。
如果您正在查看在线转换器,它们可能会显示浮点数如何编码。浮点格式不只是将数字转换为二进制。他们以某些方式移动和操纵数字以对其进行编码。这些编码的讨论与将数字转换为二进制的讨论是分开的。