binary32 float(IEEE)中的前导位

时间:2011-12-09 17:38:37

标签: c++ types floating-point bit

问题的背景 - specifications of binary32 float

我的问题是关于假设,第一个(前导)位总是1,所以我们不需要存储它。这是真的,但它在数量上有另一个作用..我们知道,从哪里开始。因此,在提取出第一个非零位后,我们不知道数字的开始位置,除非之后有另一个非零位。

在那篇wiki文章中,他们使用数字(1.100011)二进制文件。因此分数是100011,我们可以毫无问题地建立这个数字。但是,(1.000011)二进制呢?我们提取1并且我们留下了000011,并且由于我们无法在零初始化的位域中存储前导零,我们得到11.但是当我们想要构建它时会发生什么呢?我们得到1.11,这是错误的。

那么我们如何能够自由地提取任意数字的前导位呢?

1 个答案:

答案 0 :(得分:2)

  

然而,(1.000011)二进制呢?我们提取1并且我们留下了000011,因为我们不能在零初始化的位域中存储前导零,所以我们得到11。

事实上,你确实存储了前导零。存储的内容是000011,当重新添加1时,您回到了开始的位置。存储前导零(在删除前导1之后)是使它工作的原因。