首页 文章

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

提问于
浏览
20

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

3 回答

  • 26

    找到小于你的数字的2的最大幂,例如,如果你从x = 10.0开始然后23 = 8,那么指数是3.指数偏向127,这意味着指数将表示为127 3 =那么尾数是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
    

    您可以使用简单的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;
    }
    
  • 8

    取一个数字172.625.This数字是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
    

    add exponent 127 7 127 = 134

    将134转换为二进制格式

    134=10000110
    

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

    0 |10000110 |01011001010000000000000
    

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

  • 11

    浮点数只是scientific notation . 让我们说我用科学记数法要求你表达circumference of the Earth in meters . 你会写:

    4.007516×107米

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

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

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

    在IEEE754中,它是

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

相关问题