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

Binary 如何将十进制数转换为IEEE 754单精度浮点格式?,binary,floating-point,ieee-754,Binary,Floating Point,Ieee 754,如何手动将十进制(以10为基数)数字更改为IEEE 754单精度浮点格式?我知道它有三个部分,一个符号,一个指数和一个尾数。我只是不完全理解最后两部分到底代表了什么 找出2的最大幂,它小于你的数字,例如,如果你从x=10.0开始,那么23=8,那么指数是3。指数有127的偏差,因此这意味着指数将表示为127+3=130。尾数是10.0/8=1.25。1是隐式的,所以我们只需要表示0.25,当表示为23位无符号小数量时,它是010 0000。符号位为0表示正。因此,我们: s | exp [130

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

找出2的最大幂,它小于你的数字,例如,如果你从x=10.0开始,那么23=8,那么指数是3。指数有127的偏差,因此这意味着指数将表示为127+3=130。尾数是10.0/8=1.25。1是隐式的,所以我们只需要表示0.25,当表示为23位无符号小数量时,它是010 0000。符号位为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;
}
#包括
typedef联合
{
int i;
浮动f;
}U;
内部主(空)
{
U U;
u、 f=10.0;
printf(“%g=%#x\n”,u.f,u.i);
返回0;
}

浮点数是简单的。比方说,我让你们用科学符号来表示。你会写:

4.007516×107m

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

IEEE754和小学科学记数法之间唯一显著的区别是浮点数在基数2,所以它不是某事物幂的10倍,而是某事物幂的2倍。那么你可以用普通的人类科学符号写下,比如256,如下所示:

2.56×102(尾数2.56和指数2)

在IEEE754中,它是


1×28-尾数为1,指数为8。

取数字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*2=1.250   1
0.250*2=.50     0
0.50*2=1.0      1
0.625=101
将中的0.625转换为二进制格式

128 64 32 16 8 4 2 1
 1  0  1  0  1 1 0 0
172=10101100
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
说明: 位的高阶是数字的符号。 数字以符号大小格式存储。 指数以8位字段格式存储,该格式与指数相差127 以23位低位存储的二进制点右侧的数字。
注意---此格式是IEEE 32位浮点格式

这些将有帮助,您可以尝试此链接。您可以创建一个MATLAB脚本吗?谢谢。@Drazick:如果你有一个MATLAB问题,请把它作为一个新问题发布。嗨,c代码也很好。只是想要一个参考代码来实现您的解决方案。谢谢。@Drazick:上面的答案中有C代码-或者你需要一些不同的东西吗?我指的是一个函数,它的输入是一个单精度/双精度数字,输出是一个32/64位的字符串,表示输入数字。谢谢。IEEE FP格式中的尾数不应该是01011000000000000吗?