这些位的构成如下:
种类-------符号位-------------指数位----------------尾数位----
float---第31位(占1bit)---第30-23位(占8bit)----第22-0位(占23bit)
double--第63位(占1bit)---第62-52位(占11bit)---第51-0位(占52bit)
取值范围主要看指数部分:
float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。
double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。
由于float的指数部分对应的指数范围为-128~128,所以取值范围为:
-2^128到2^128,约等于-3.4E38 — +3.4E38
精度(有效数字)主要看尾数位:
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位
1.这是c语言中的强制类型转化问题。在有不同类型的量参与运算时,一律先强制类型转化成一致的类型再运算。转化规则是以最高级别的类型为基准。由低向高转化。类型的级别从低到高排列依次为:char->int->long int ->float->double2.因为双精度的数,其有效位比单精度更多,有效位越多,当然计算的结果越精确。但是有效位越多,数据处理也就越多,因而运算速度会降低。
在c中浮点型常量如果没有说明,一律看做是double型。有说明的除外,如:
3.21f,这个就是float型。
C语言中的有效位数不是平时我们说的小数点后面的有效数字,而是指所有的数字,比如:123.456是从1开始的。如果数据类型是float型,那么有效位数是7位,也就是说存储float b=123.4567891只能保证前7位是正确的,即我们取出b时它的前7位完全没问题就是123.4567,但是后面的就不知道是什么了。如果是double型数据,则有效位数是15位,存储时类似于float型。