所以我无法理解浮点二进制表示。下面是我老师笔记中的图像,但我不明白他们如何获得每行的 8 位指数和 23 位尾数的数字串。
所以老师将 284 表示为 100011100 = 1.000111 x 2^8。我知道该位符号为 0,因为它是一个正数。我不知道 00001000 的 8 位指数从何而来,而 23 位尾数似乎是 1.000111 的更大表示,填充了 23 位。
我想知道是否有人可以解释老师如何填写图表/获取将 100011100 转换为 1.000111 x 2^8 的值?我尝试观看教程并查看其他网站,但我仍然很困惑。
如果有人能解释老师如何从第一行的值更改为 8 位指数 10000111 和 23 位尾数 000 1110 0000 0000 0000 0000,如图所示第三行。任何帮助将不胜感激,我已经盯着笔记的这一部分看了几个小时,但我似乎无法理解这一切背后的逻辑。这一切看起来是如此复杂和令人难以承受。
最佳答案
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 以获得 0.000111,然后存储 000111,后跟零。 (正规数是等于或高于该格式的最小指数范围的任何可表示的数字,对于 IEEE-754 32 位二进制格式为 2−126。对于次正规数,前导位是显式存储,并修改指数的处理方式。)
脚注
1 “有效数”是浮点表示的小数部分的首选术语。 “尾数”是对数分数部分的旧术语。有效数是线性的。尾数是对数。
关于c - 理解浮点二进制模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58176576/