C++ 二进制32浮点中的前导位(IEEE)

C++ 二进制32浮点中的前导位(IEEE),c++,types,floating-point,bit,C++,Types,Floating Point,Bit,问题的背景- 我的问题是关于假设,第一位(前导)总是1,所以我们不需要存储它。这是真的,但它在数字上还有另一个作用。。我们知道,从哪里开始。所以在提取第一个非零位之后,我们不知道数字从哪里开始,除非后面还有另一个非零位 在那篇维基文章中,他们使用数字(1.100011)二进制。所以分数是100011,我们可以毫无问题地把这个数字加起来。但是,(1.000011)二进制呢?我们提取1,剩下的是000011,因为我们不能在零初始化的位字段中存储前导零,所以得到11。但是,当我们想要重建它时,会发生什

问题的背景-

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

在那篇维基文章中,他们使用数字(1.100011)二进制。所以分数是100011,我们可以毫无问题地把这个数字加起来。但是,(1.000011)二进制呢?我们提取1,剩下的是000011,因为我们不能在零初始化的位字段中存储前导零,所以得到11。但是,当我们想要重建它时,会发生什么呢?我们得到1.11,这是错误的

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

但是,(1.000011)二进制呢?我们提取1,剩下的是000011,因为我们不能在零初始化的位字段中存储前导零,所以得到11


事实上,您确实存储前导零。存储的是000011,当1添加回中时,您就回到了开始的位置。存储前导零(在前导1被删除后)是它工作的原因。

前导零的数量由位字段的大小暗示。想象一下,填充零的位字段00000000。。。在那里复制000011。。你得到00000011。。。不轮班;)你仍然不知道有多少个零,尾数存储在一个23位的字段中。您拥有的值是11。这仅仅是2位。因此,必须有21个前导0位。记住,它是一个固定大小的字段。存储了23位。如果要存储的值只有两位,则其他位为零。这些是前导零位。你忘了指数了吗?你永远不会把数字1000011放入浮点值的尾数,因为它不是标准化的。(二进制点前必须有一个1。)如果尾数为1.00011,则该尾数编码为[1.]00010000000000000000,其中前导1和二进制点未实际存储。回读时,值为00010000000000000000。隐含的前导1和二进制点被恢复,产生所需的1.0001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000。。不能将000011存储在位字段中。。您可以只存储11(或其他任何东西——1101100——但必须以1开头)。不能存储前导零。设置为前导零和初始化为零之间有什么区别?只有0在1之后才有区别。唯一可能的假设是,我们使用了位字段的完整大小,但是,您如何存储7位数字,并在其中引入0,例如10位位字段?谢谢,我不知道你说的位域是什么意思。尾数只剩下23位。每一个都有很好的标识和顺序。它们可以都是零,也可以都是一,或者任何其他模式。@Raven:“我不知道你为什么要得票。”因为大卫知道他在说什么,而你不知道。你为什么不看几个浮点数字的二进制表示,自己看?“Bifield =有序的数组……在C++中,它是STD::向量”。我了解位字段的外观。。最后一枪。想象一下二进制数10011和111,以及4位(0000)的2位字段。。因此,根据IEEE,我们可以提取前导1。我们得到0011和11(事实上,我们不能得到0011,因为它马上就是11,但这就是你写的)。现在,将其存储在位字段中:第一个数字看起来像0011,第二个像0011。他们完全一样!但是10011和111是不一样的。@TonyK我刚刚做了。。我找到了我所期待的。。。但是看起来我对浮点数如何工作的想法是错误的。。无论如何,这似乎是一个好答案