21

我将如何手动将十进制(以 10 为底)数字更改为 IEEE 754 单精度浮点格式?我知道它由三个部分组成,一个符号,一个指数和一个尾数。我只是不完全理解最后两部分实际代表什么。

4

3 回答 3

27

找到小于您的数字的 2 的最大幂,例如,如果您从 x = 10.0 开始,然后 2 3 = 8,则指数为 3。指数偏置 127,因此这意味着指数将表示为 127 + 3 = 130。尾数为 10.0/8 = 1.25。1 是隐含的,所以我们只需要表示 0.25,即 010 0000 0000 0000 0000 0000 表示为 23 位无符号小数。符号位为 0 表示正数。所以我们有:

s | exp [130]  | mantissa [(1).25]            |

0 | 100 0001 0 | 010 0000 0000 0000 0000 0000 |

0x41200000

您可以使用简单的 C 程序测试表示,例如

#include <stdio.h>

typedef union
{
    int i;
    float f;
} U;

int main(void)
{
    U u;
    
    u.f = 10.0;
    
    printf("%g = %#x\n", u.f, u.i);

    return 0;
}
于 2010-03-08T21:46:23.163 回答
12

取一个数字 172.625。这个数字是 Base10 格式。

将此格式转换为base2格式为此,首先将172转换为二进制格式

128 64 32 16 8 4 2 1
 1  0  1  0  1 1 0 0
172=10101100

将 0.625 转换为二进制格式

0.625*2=1.250   1
0.250*2=.50     0
0.50*2=1.0      1
0.625=101

二进制格式 172.625=10101100.101。这是 base2 格式 10101100*2

移动这个二进制数

1.0101100*2 **7      Normalized
1.0101100 is mantissa
2 **7 is exponent

添加指数 127 7+127=134

将 134 转换为二进制格式

134=10000110

数字是正数,所以数字 0 的符号

0 |10000110 |01011001010000000000000

解释:位的高位是数字的符号。number 以符号大小格式存储。指数以 8 位字段格式存储,向指数偏移 127 二进制点右侧的数字以 23 位的低位存储。注意---此格式为 IEEE 32 位浮点格式

于 2013-09-29T07:13:57.033 回答
8

浮点数只是科学记数法。假设我让你用科学计数法以米表示地球的周长。你会写:

4.007516×10 7

指数就是:这里是十的幂。尾数是数字的实际数字。当然,符号只是正面或负面的。所以在这种情况下,指数是 7 ,尾数是 4.007516 。

IEEE754 和小学科学记数法之间的唯一显着区别是浮点数以2 为底,所以它不是某物的 10 次方,而是某物的 2 次方。所以你可以用普通的人类科学记数法写出 256 为:

2.56×10 2(尾数 2.56 和指数 2),

在 IEEE754 中,它是

1×2 8 — 尾数为 1,指数为 8。

于 2010-03-08T21:55:46.170 回答