c - 理解浮点二进制模型

标签 c floating-point binary bit

所以我无法理解浮点二进制表示。下面是我老师笔记中的图像,但我不明白他们如何获得每行的 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,如图所示第三行。任何帮助将不胜感激,我已经盯着笔记的这一部分看了几个小时,但我似乎无法理解这一切背后的逻辑。这一切看起来是如此复杂和令人难以承受。

enter image description here

最佳答案

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/

相关文章:

c - 获取网关以用于 ANSI C 中的给定 ip

c - 设置的位数(可以迭代与设置的位数相同的次数)

postgresql - 选择十进制形式的 float

c - 为什么我的 C 程序在这里打印 0.000000?

c++ - 在 C++ 中访问预定义 float 组时出现问题

c++ - 读取 fopen 打开的二进制文件 ("ab") (add,binary)

java - 二进制搜索不适用于 double

c++ - 在 C++ 内联汇编中定义一个变量

c# - 如何编写按行和按列排序的二进制矩阵/数组?

c - 区分嵌入式 NUL 和 NUL 终止符