如何从十进制数转换为IEEE 754单精度浮点格式?

tga*_*gai 20 floating-point binary ieee-754

如何手动将十进制(基数为10)的数字转换为IEEE 754单精度浮点格式?我知道它有三个部分,一个符号,一个指数和一个尾数.我只是不完全理解最后两个部分实际代表什么.

Pau*_*l R 26

找到小于你的数字的2的最大幂,例如,如果你从x = 10.0开始然后2 3 = 8,那么指数是3.指数偏向127,这意味着指数将表示为127 + 3 = 130.然后尾数为10.0/8 = 1.25.1是隐式的,所以我们只需要表示0.25,即表示为23位无符号小数的010 0000 0000 0000 0000 0000.符号位为0表示正数.所以我们有:

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

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

0x41200000
Run Code Online (Sandbox Code Playgroud)

您可以使用简单的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;
}
Run Code Online (Sandbox Code Playgroud)


小智 11

取一个数字172.625.This数字是Base10格式.

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

128 64 32 16 8 4 2 1
 1  0  1  0  1 1 0 0
172=10101100
Run Code Online (Sandbox Code Playgroud)

将0.625转换为二进制格式

0.625*2=1.250   1
0.250*2=.50     0
0.50*2=1.0      1
0.625=101
Run Code Online (Sandbox Code Playgroud)

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

移动此二进制数

1.0101100*2 **7      Normalized
1.0101100 is mantissa
2 **7 is exponent
Run Code Online (Sandbox Code Playgroud)

添加指数127 7 + 127 = 134

将134转换为二进制格式

134=10000110
Run Code Online (Sandbox Code Playgroud)

数字为正数,因此数字为0

0 |10000110 |01011001010000000000000
Run Code Online (Sandbox Code Playgroud)

说明:位的高位是数字的符号.数字以符号幅度格式存储.指数以8位字段格式存储,偏向127指数.二进制点右侧的数字以23位的低位存储.注意---这种格式是IEEE 32位浮点格式


Cra*_*rks 8

浮点数只是科学记数法.让我们说我用科学记数法要求你以为单位表示地球周长.你会写:

4.007516×10 7

指数就是这样:十这里的力量.尾数是数字的实际数字.当然,这个标志只是正面或负面的.因此,在这种情况下,指数为7,尾数为4.007516.

IEEE754与小学 - 科学记数法之间唯一显着的区别在于浮点数在基数2中,所以它不是某事物能力的十倍,它是某事物力量的两倍.所以你要用普通的人类科学记数法写出256,如:

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

在IEEE754中,它是

1×2 8 - 尾数为1,指数为8.