C语言:浮点型的基本知识

C语言中浮点型分为单精度浮点型 float、双精度浮点型double和long double。其中long double是C99标准新增加的。

不同平台、编译器可能会有些差异,这里以win10 x64为例

  • float:占用4个字节(Byte),即32个二进制位(Bit)
  • double:占用8个字节(Byte),即64个二进制位(Bit)
  • long double:占用16个字节(Byte),即128个二进制位(Bit)

一般来说:long double >= double >= float

另外可引入头文件float.h来打印输出浮点型的最大取值及最小取值范围

具体演示可以看下面的代码片段

单精度float

#include <stdio.h> //预处理语句,引入标准输入输出头文件
#include <float.h> //浮点型头文件
/*
    时间:2022/3/29
    作者:sgbl888
    功能:浮点型float的相关知识
    知识点:
        1、float为单精度浮点型,有效精度为6~7位(含整数部分),后面就不能保证正确了
        2、float占用4个字节,可用sizeof关键字测量一下
        3、float类型不能加signed或unsigned表示有符号或无符号
        4、把一个整型转换为float类型
        5、只输出部分小数位
*/
int main(){
    //测试把浮点型数值赋值给整型,实际场景这样使用会导致数据错误
    int f1 = 1.234567; //1
    int f2 = 0.000001; //0
    int f3 = 365.12345; //365
    printf("f1 = %d\t f2 = %d\t f3 = %d\n", f1, f2, f3); //结果只保留了整数部分
    printf("-----------------\n");

    //定义float类型数据
    float f4 = 1.234567;
    float f5 = 0.0000001; //整体已经超出7位了,因此不能正确显示
    float f6 = 365.12345; //输出已经超出7位了,因此只能显示365.123444(第8位的5就不正确了)
    printf("f4=%f \tf5=%f \tf6=%f \n", f4, f5, f6);
    printf("-----------------\n");

    //sizeof关键字测量float的占用字节
    printf("float type use %hd Byte\n", sizeof(float)); //结果为4(即64Bit位)

    //引入头文件float.h,打印输出float类型最大值和最小值
    printf("float max: %f\t float min: %f\n", FLT_MAX, FLT_MIN); //340282346638528860000000000000000000000.000000  ~ 0.000000
    float f7 =340282346638528860990000000000000000099.02; //只能显示整数前面的部分
    printf("f7 = %f\n", f7);
    printf("-----------------\n");

    //把一个整型转换为float类型
    float f8 = (float) f1;
    printf("f8 = %f\n", f8); //结果1.000000 为什么呢?因为f1是 int,把1转换就得到这个结果
    printf("-----------------\n");

    //输出部分小数位
    printf("f4 = %.2f\n", f4); //只保留2位小数,结果为1.23
    
    return 0; //返回给操作系统内核,0表示正常退出
}

双精度double:

#include <stdio.h>
#include <float.h> //浮点型头文件
/*
    时间:2022/3/29
    作者:sgbl888
    功能:学习double类型的相关知识
    知识点:
        1、双精度浮点型double
        2、比double更大还有long double(C99标准新增)
        3、double、long double的最大、最小取值范围
    
*/
int main(){
    //sizeof关键字测试double占用字节
    printf("double type use %hd Byte\n", sizeof(double)); //占用8个字节,也就64位二进制位
    printf("long double type use %hd Byte\n", sizeof(long double));

    //double、long double的最大、最小取值范围
    printf("double max:%lf double min:%lf\n", DBL_MAX, DBL_MIN);
    printf("long double max:%Le long double min:%Le\n", LDBL_MAX, LDBL_MIN);
    printf("--------------\n");

    //定义double变量
    double d1 = 12345.987654321012345678908888;
    printf("d1 = %.16lf\n", d1); //printf默认只输出6位小数。

    return 0;
}

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值