c - 理解浮点二进制模型

c - understanding floating point binary model

所以我无法理解浮点二进制表示。下面是我老师笔记中的一张图片,但我不明白他们是如何获得每一行的 8 位指数和 23 位尾数的数字串的。

所以老师将 284 表示为 100011100 = 1.000111 x 2^8。我知道位符号是 0,因为它是一个正数。我不知道00001000的8位指数是从哪里来的,23位尾数似乎是1.000111的更大表示,填充了23位。

我想知道是否有人可以解释一下老师是如何填写 chart/get 将 100011100 转换为 1.000111 x 2^8 的值的?我尝试观看教程并查看其他网站,但我仍然很困惑。

如果有人能解释老师如何将第一行的值更改为 10000111 的 8 位指数和 000 1110 0000 0000 0000 0000 的 23 位尾数作为显示在第 3 行。任何帮助将不胜感激,我已经盯着笔记的这一部分看了好几个小时,但我似乎无法理解这一切背后的逻辑。一切都显得如此复杂和难以抗拒。

好的,所以第一位是符号位。如果设置了该位,则数字为负数。

之后,接下来的 8 位(在 float 中)是 指数127 从指数中减去,然后数字乘以 2^exponent

最后嵌套23位为尾数。这很复杂,但本质上,它包含数字的小数部分。

我发现这个 YouTube 视频提供了有关如何将数字转换为 IEEE-754 float 格式的信息。你应该看看它:Decimal to IEEE 754 Floating Point Representation.

So the teacher represents 284 as 100011100 = 1.000111 x 2^8. I get that the bit sign is 0 because it's a positive number. I have no idea where the 8-bit exponent of 00001000 came from,…

1.000111 × 28中2的指数为8。8的二进制为1000,即00001000。

稍后,127被添加到指数中。这只是指数如何存储的问题。与任何其他表示正指数和负指数的方法不同,它只是一个规则,即在存储指数之前将 127 添加到指数中。因此,如果指数为 8 (00001000),我们将 127 相加得到 135 (10000111) 并将其存储在指数字段中。这为我们提供了一种存储负指数的方法。如果指数是-1,我们存储-1 + 127 = 126。如果指数是-126,我们存储-126 + 127 = 1.

I would also appreciate if someone could explain how the teacher went from having the values in the first row to changing them to an 8-bit exponent of 10000111 and a 23-bit mantissa of 000 1110 0000 0000 0000 0000 as shown in the 3rd row.

对于普通数,我们从有效数1中删除第一位,并将接下来的 23 位存储在有效数字段中。因此,对于有效数 1.000111,我们删除前导 1 以获得 .000111,然后我们存储 000111,后跟零。 (正规数是格式的最小指数标度或以上的任何可表示数,对于 IEEE-754 32 位二进制格式为 2−126。对于次正规数,显式存储前导位,并修改指数的处理方式。)

脚注

1 “有效数”是浮点表示的小数部分的首选术语。 “尾数”是对数的小数部分的旧术语。有效数是线性的。尾数是对数的。

//unsigned int s...x...n...

s xxxxxxxx nnnnnnnnnnnnnnnnnnnnnnnnn

浮动==(-1) ^ s * (1 + n * 2 ^ -23) * (2 ^ (x - 127))