为什么float可以定义成float x= 33.1f的形式?

最近在重温C语言的内容,在b站看课,看到float x= 33.1f,不明白为什么数字中会有f。

因此写一篇文章来记录一下这个问题。


我们都知道float表示的是浮点数,其实在某些编译器中默认的浮点数就是双精度的。

因此在这种编译器下,定义的变量类型是float还是double,默认都是双精度的。

此时,如果我们要将某个变量定义为单精度数字,需要额外进行处理,也就是类似如下表达式,在数字后面加个f。

float x= 33.1f

同时,后缀字母 f只适用于 float 类型,如果要声明 double 类型的变量,则不需要使用该后缀。

补充:

如果我们打印变量x,可能会出现如下的结果:

#include <stdio.h>

int main() {
    float x = 33.1f;
    printf("%f
", x); 
    return 0;
}
33.099880

打印出来的结果不是33.1,这是为什么?

因为二进制无法准确的表示0.1。

0.1可以写成1/10,而10的分解质因数为2 * 5,2可以用二进制表示,但是5不能。

解释一下,为什么1/5无法用二进制表示?

二进制表示小数只能表示成1/2,1/4,1/8这样的形式,1/5=1/8+3/40。

3/40其实是无法二进制表示的,只能无限接近,不能准确表示。

因此0.1其实是个无限循环小数,因此打出来的值不会是33.1,而是33.0XXXX的形式。

经验分享 程序员 微信小程序 职场和发展