美文网首页C语言深度学习
C语言学习第4篇---浮点数概念剖析

C语言学习第4篇---浮点数概念剖析

作者: CodeAllen | 来源:发表于2019-05-30 22:20 被阅读0次
    0414.jpg

    -- 作者 Allen5G 转载请注明出处
    微信公众号「Allen有话说」(微信号:Allen5G)

    1.内存中的浮点数

    1.浮点数在内存的存储方式为:符号位,指数,尾数

    image.png

    float与double类型的数据在计算机内部的表示法是相同的,但由于所占存储空间不同,其分别能够表示的数值范围和精度不同

    2.浮点数存储实例

    浮点数的转换方式

    1.将浮点数转换为二进制

    2.用科学技术法表示二进制浮点数

    3.计算指数偏移后的值

    注意:

    计算指数是需要加上偏移量, 而偏移量的值与类型相关

    实例:对于指数6,偏移后的值如下

    float :127+6 --->133

    double : 1023+6--->1029

    10进制浮点数的内存表示

    实数8.25的在内存中的float表示

    ---8025的二进制表示:1000.01-->1.00001*(2^3)

    符号位:0**

    指数:127 + 3 --->10000010**

    小数:00001**

    ---内存中8.25的float表示:**

    0100000010 000010000000000000000000 -->0x41040000**

    实验1:10进制浮点数的内存表示

    #include <stdio.h>
    
    int main()
    
    {
    
        float f = 8.25;
    
        unsigned int* p = (unsigned int*)&f;
    
        printf("0x%08X\n", *p); //打印十六进制表示,四个字节
    
        return 0;
    
    }
    
    image.gif

    一个有趣的问题:

    int类型的范围 :[-2^31 , 2^31 - 1]

    float的类型范围 :[-3.410^38 , 3.410^38]**

    思考:

    int和float都占四字节的内存,为什么float却比int的范围大很多?

    浮点类型的秘密

    1.float能表示的具体数字的个数与int一样

    2.float可表示的数字之间不是连续的,存在间隙

    3.float只是一种近似的表示法,不能作为精确数使用

    4.由于内存表示法相对复杂,float的运算速度比int慢很多

    注意:double与float具有相同的内存表示法,因此double也是不精确的。由于double占用的内存较多,所能表示的精度比float高、

    实验2;float类型的不精确实例

    #include <stdio.h>
    
    int main()
    
    {
    
        float f = 3.1415f;
    
        float fl = 123456789;
    
        printf("%0.10f\n", f);
    
        printf("%0.10f\n", fl);
    
        return 0;
    
    }
    
    image.gif

    小结;

    1.浮点数类型与整型类型的内存表示法不同

    2.浮点类型的内存表示更复杂

    3.浮点类型可表示的范围更大

    4.浮点类型是一种不精确的类型

    5.浮点类型的运算速度较慢

    相关文章

      网友评论

        本文标题:C语言学习第4篇---浮点数概念剖析

        本文链接:https://www.haomeiwen.com/subject/uygbtctx.html