c++ - 二进制 32 float (IEEE) 中的前导位

标签 c++ types floating-point bit

问题的背景 - 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/

相关文章:

c++ - Gprof 结果 : what is "alloc_mmap"?

c++ - GCC 4.9 和 clang 3.5 中的 std::rbegin 和 std::rend 函数

c# - 小数点四舍五入问题

c++ - "atom"数据类型是什么?

reactjs - 键入 React HOC 的正确方法是什么?

sql - 将 NaN 值插入浮点列

python - 我如何知道要使用什么类型的浮子?

c++ - 堆栈在哪里实现?

c++ - 与 float 和 float 文字相比的奇怪输出

c++ - 在Linux上从char缓冲区写入二进制文件