问题的背景 - specifications of binary32 float
我的问题是关于第一个(前导)位始终为 1 的假设,因此我们不需要存储它。这是真的,但它在数字上还有另一个作用……我们知道,它从哪里开始。所以在提取第一个非零位之后,我们不知道数字从哪里开始,除非紧接着有另一个非零位。
在那篇 wiki 文章中,他们使用二进制数 (1.100011)。所以分数是 100011,我们可以毫无问题地重新建立这个数字。但是,(1.000011)二进制呢?我们提取 1,剩下 000011,因为我们不能在零初始化位域中存储前导零,所以我们得到 11。但是,当我们想要重建它时会发生什么?我们得到 1.11,这是错误的。
那么我们如何才能自由提取任意数量的前导位呢?
最佳答案
However, what about (1.000011)binary? we extract 1 and we're left with 000011, and as we can't store leading zeroes inside zero-initialized bitfield, we get 11.
事实上,您确实存储了前导零。存储的是 000011,当 1 被加回时,你又回到了开始的地方。存储前导零(在删除前导 1 之后)是它起作用的原因。
关于c++ - 二进制 32 float (IEEE) 中的前导位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449486/