从二进制转换为 IEEE 浮点

Posted

技术标签:

【中文标题】从二进制转换为 IEEE 浮点【英文标题】:Converting from binary to IEEE floating-point 【发布时间】:2011-03-13 19:19:24 【问题描述】:

我需要将二进制数 0000 0110 1101 1001 1111 1110 1101 0011 转换为 IEEE 浮点数。答案是1.10110011111111011010011 x 2^−114,但是指数是怎么推导出来的呢?

【问题讨论】:

【参考方案1】:

http://en.wikipedia.org/wiki/Single_precision_floating-point_format

取前 9 位数字

0 00001101

第一个是符号(0 ==正)

接下来的 8 位是指数,转换为十进制 == 13。IEEE 32 二进制浮点数中的符号偏移 127,因此 13 - 127 = -114。

(小数部分缺少 1,这是隐含的)

完成:-)

【讨论】:

【参考方案2】:

例如 33.1 数字

第一:

十进制转二进制

33.1 = 100001.0001100110011001100 。 . .

秒:

1.000010001100110011001100...*2^5

比:

唱 = 积极 = 0

指数 = 5 + 127 = 132 = (1000100)

尾数 = 000010001100110011001100...

S E M =0 1000100 000010001100110011001100 = (33.1)十进制 = (42046666)十六进制

【讨论】:

【参考方案3】:

让我们将数字的表示分解为 IEEE-754 浮点值的组成部分:

   0 00001101 10110011111111011010011
sign exponent significand

指数字段是b00001101,即13。我们如何从那里得到-114?

IEEE-754 数字的指数以 有偏 表示形式存储,这意味着将一个固定值添加到真正的指数中以获得存储在编码中的值。对于单精度(32 位),偏差为 127。要从编码中获得指数,我们需要减去此偏差:

13 - 127 = -114

不存储有效数字的单位位(除非指数字段为零,否则它隐含为 1),因此我们将该位插入有效数字,并获得您列出的值:

b1.10110011111111011010011 * 2^-114

【讨论】:

以上是关于从二进制转换为 IEEE 浮点的主要内容,如果未能解决你的问题,请参考以下文章

用python从二进制文件中读取32位带符号的ieee 754浮点?

从 IEEE 754-2008 十进制浮点数据转换为二进制浮点格式

将十进制数表示成ieee754标准的32浮点规格化数 27/64

十进制浮点到二进制转换

将任何文件转换为二进制字符串并从二进制转换为文件[关闭]

如何将大数(例如 1.23e29)转换为 IEEE 754 单精度浮点格式?