Float , double , long double类型:
其中float的存储方式如下图所示:
而双精度的存储方式为:
浮点类型表示方法:1。科学记数法1.0*103。2。指数记数法1.0e3。3一般记数法 如:1000
C 标准规定:float 类型必须至少能表示6位有效数字,取值的范围至少是10-37到1037.。6位有效数字指浮点数至少应能精确到小数点前6位。通常系统用32位空间来存储一个浮点数其中8位用于存储指数和符号,24位用于存储非指数的部分。(称为尾数或有效数字)及 其符号。
Double 类型:它和float的最少取值小范围相同,但它至少能表示10位的有效数字。一般的double类型使用64位而不是32位长度。一些系统将多出的32位全部用于尾数部分,这增加了数值的精度并减小了舍入误差。其它的一些系统将其中的一些位分配给指部分以容纳更大的批数,从而可以增加表达数值的范围。
Long double 类型:它满足比double 类型更高的精度要求,不过C保证它与double的精度一样。
声明 浮点变量
他同int char 类型一样声明变量的方法。类型名 + 变量 +分号
如:flart a ; double b ; long double c ;
浮点常量
默认情况下编译器将浮点常量当作double类型。使用64位进行存储,运算完成后结果被成为float 长度。这样的作用是保证计算精度,但是会减慢程序的执行。所以C通过加后缀的方法来表示。用f或者F后缀使编译器把浮点常数当作float类型。用l或L表示当作long double 不加就是默认double .。
C99为表示浮点常数添加了一种新的十六进制格式。使用前缀0x或0X接着是十六进制数字,然后是p或P最后是2的指数
如:0xa.1fp10 整个数的十进制值为10364.0
a.1f是 1010 . 0001 1111(每一位十六进制等于四位二进制数)
1010 0001 1111 00 .0
10364 .0
打印浮点值
//3-7.c-------使用两种方式显示浮点值
#include <stdio.h>
int main (void)
{
float a = 3200.00f;
double b = 2.14e9;
long double c = 5.23e-5L;
printf ("%f can be written %e\n",a,a);
printf ("%f can be written %e\n",b,b);
printf ("%f can be written %e\n",c,c);
printf ("%Lf can be written %Le\n",c,c);
return 0 ;
}
上溢:当计算结果是一个大得不能表达是的数时会发生上溢
下溢:当计算结果是一个小得不能表达是的数时会发生下溢
显示类型的大小:用sixeof (类型名)
// 3-8.c ----输出类型的大小
#include <stdio.h>
int main (void )
{
printf ("int 类型的大小是:%u个字节\n",sizeof (int));
printf ("char类型的大小是:%u个字节\n",sizeof (char));
printf ("long 类型的大小是:%u个字节\n",sizeof (long));
printf ("double类型的大小是:%u个字节\n",sizeof (double));
return 0 ;
}