← 返回首页
C语言系列教程(七)
发表时间:2021-03-19 17:26:40
小数类型

C语言中的小数有两种类型,分别是 float 或 double;float 称为单精度浮点型,double 称为双精度浮点型。

1.浮动类型长度

在windows 64位系统中,float类型占据4个字节,double类型占据8个字节。

例如:

#include <stdio.h>

int main(){
    int float_length = sizeof(float);
    int double_length = sizeof(double);

    printf("float length=%d, double length=%d\n", float_length, double_length);
    return 0;
}

运行结果:

float length=4, double length=8

Float数据类型用于存储单精度浮点数。具有4个字节,包括一个符号位、一个8位二进制指数和一个23位尾数。由于尾数的高顺序位始终为1,因此它不是以数字形式存储的。此表示形式为float类型,提供了一个在-3.402823E38到3.402823E38之间的范围。

Double 变量以带符号的 IEEE 64 位(8 个字节)双精度浮点数形式存储,负值取值范围为 -1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

中定义了浮点类型的范围,包括最大值和最小值常量。

例如:

#include <stdio.h>
#include <float.h>

int main(){
    printf("max float = %f\n",FLT_MAX);
    printf("min float = %f\n",FLT_MIN);
    printf("max double = %lf\n",DBL_MAX);
    printf("min double = %lf\n",DBL_MIN);
    return 0;
}

运行结果:

max float = 340282346638528860000000000000000000000.000000
min float = 0.000000
max double = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
min double = 0.000000

2.默认类型

一个数字,是有默认类型的:对于整数,默认是 int 类型;对于小数,默认是 double 类型。 例如:

#include <stdio.h>
#include <float.h>

int main(){

    long a = 100;  //默认把 int 转换为long 
    int b = 294;  
    float x = 52.55;  //默认把double 转换为float 
    double y = 18.6;

    printf("100 length is %d\n",sizeof(100));
    printf("a length is %d\n",sizeof(a));
    printf("52.55 length is %d\n",sizeof(52.55));
    printf("x length is %d\n",sizeof(x));

    return 0;
}

运行结果:

100 length is 4
a length is 4
52.55 length is 8
x length is 4

如果不想让数字使用默认的类型,那么可以给数字加上后缀,手动指明类型: - 在整数后面紧跟 l 或者 L(不区分大小写)表明该数字是 long 类型; - 在小数后面紧跟 f 或者 F(不区分大小写)表明该数字是 float 类型。

上例改写如下:

#include <stdio.h>
#include <float.h>

int main(){

    long a = 100L;  //默认把 int 转换为long 
    int b = 294;  
    float x = 52.55f;  //默认把double 转换为float 
    double y = 18.6;

    printf("100L length is %d\n",sizeof(100L));
    printf("a length is %d\n",sizeof(a));
    printf("52.55f length is %d\n",sizeof(52.55f));
    printf("x length is %d\n",sizeof(x));

    return 0;
}

运行结果:

100L length is 4
a length is 4
52.55f length is 4
x length is 4

3.输出控制符

浮动类型输出对应的格式控制符见下表 |控制符|描述| |-|-| |%f|以十进制形式输出 float 类型;| |%lf|以十进制形式输出 double 类型;| |%e|以指数形式输出 float 类型,输出结果中的 e 小写;| |%E|以指数形式输出 float 类型,输出结果中的 E 大写;| |%le|以指数形式输出 double 类型,输出结果中的 e 小写;| |%lE|以指数形式输出 double 类型,输出结果中的 E 大写|

例如:

#include <stdio.h>
#include <float.h>

int main(){
    printf("max float = %f\n",FLT_MAX);
    printf("max double = %lf\n",DBL_MAX);
    printf("max float = %e\n",FLT_MAX);
    printf("min double = %le\n",DBL_MAX);
    printf("max float = %E\n",FLT_MAX);
    printf("min double = %LE\n",DBL_MAX);

    return 0;
}

运行结果:

max float = 340282346638528860000000000000000000000.000000
max double = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
max float = 3.402823e+038
min double = 1.797693e+308
max float = 3.402823E+038
min double = 1.797693E+308