为什么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的形式。
下一篇:
学完Java后可以从事哪些工作岗位?