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))
所以我无法理解浮点二进制表示。下面是我老师笔记中的一张图片,但我不明白他们是如何获得每一行的 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))