十进制浮点到二进制的转换



对于我的计算机体系结构类,我必须做以下简单的练习:

将数字-1,1转换为IEEE 754单精度浮点格式,然后将二进制数转换为十六进制。

这个练习的解决方案似乎是0xbf8ccccd,但我很难理解为什么十六进制数字的最后一位是d而不是c。

我似乎犯了错误的一步是,我试图将数字的小数部分-1.1转换为二进制。具体来说,我首先取0.1,然后乘以2,每次都保存整数部分。

在某一点之后,我看到某种模式出现了。这种模式是1100,它的出现是因为我们从0.4开始,经过几次乘法运算后再次以0.4结束。

使用这种方法,我得到了一个数字,0001100110011001100

根据在线转换器,从练习结果可以看出,0.1的正确二进制表示为0.000110011001101

有人知道为什么这个模式在最后被打破,以及我思考过程中的错误在哪里吗?

提前感谢!

将数字-1,1转换为IEEE 754单精度浮点格式。

这是不可能的完全。所有IEEE 754单精度浮点都是2的幂的整数(最多24位(。
-1.1和0.1不能这样表示。

两个最接近0.1的候选者:

0.0999999940395355224609375 
0.100000001490116119384765625 <-- closer

知道为什么模式在最后被打破,以及我思考过程中的错误在哪里?

当OP尝试";我首先取0.1,乘以2,每次保存整数部分&";,得出的数学模式是:

0001100110011001100110011001100... without end.

然而,由于二进制32具有24位有效精度,因此使用四舍五入的

123456789012345678901234
0001100110011001100110011001100...
rounds to 
000110011001100110011001101

模式被破坏,因为使用了取整值。

最新更新