none
l类型的区别 RRS feed

答案

  • 这个就不该在这里提,网上一搜一大把。

     

    类型 比特数 有效数字 数值范围 
    float 32 6-7 -3.4*10(-38)~3.4*10(38) 
    double 64 15-16 -1.7*10(-308)~1.7*10(308) 
    long double 128 18-19 -1.2*10(-4932)~1.2*10(4932) 

    简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字(见我的double_float文件) 

    还有,有个例子:在C和C++中,如下赋值语句 

    float a=0.1; 

    编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float ' 

    原因: 

    在C/C++中,上述语句等号右边0.1,我们以为它是个float,但是编译器却把它认为是个double(因为小数默认是double),所以要报这个warning,一般改成0.1f就没事了。 

    通常的做法,经常使用double,而不喜欢使用float。

     

    2008年12月21日 8:33
  • double 顾名思义是双精。8字节。

    float是4字节 32位表示浮点型。

    需要注意的是在内存中浮点型(double, float)的保存形式和整形是不同的。它们使用指数形式。

     

    C/C++的浮点数据类型有float和double两种。
    类型float大小为4字节,即32位,内存中的存储方式如下:

     符号位(1 bit) 
    指数(8 bit) 
    尾数(23 bit) 

     

    类型double大小为8字节,即64位,内存布局如下:

    符号位(1 bit) 
    指数(11 bit) 
    尾数(52 bit) 

     

     
    符号位决定浮点数的正负,0正1负。
    指数和尾数均从浮点数的二进制科学计数形式中获取。
    如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由此可知指数为1,尾数(即科学计数法的小数部分)为01。
    根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011 1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):

    符号位 
    指数 
    尾数 


    1000 0000 
    010 0000 0000 0000 0000 0000 


    100 0000 0000 
    0100 0000 0000 0000 0000 0000 0000
    0000 0000 0000 0000 0000 0000 

     

     

    2008年12月22日 2:28
    版主

全部回复

  • 这个就不该在这里提,网上一搜一大把。

     

    类型 比特数 有效数字 数值范围 
    float 32 6-7 -3.4*10(-38)~3.4*10(38) 
    double 64 15-16 -1.7*10(-308)~1.7*10(308) 
    long double 128 18-19 -1.2*10(-4932)~1.2*10(4932) 

    简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字(见我的double_float文件) 

    还有,有个例子:在C和C++中,如下赋值语句 

    float a=0.1; 

    编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float ' 

    原因: 

    在C/C++中,上述语句等号右边0.1,我们以为它是个float,但是编译器却把它认为是个double(因为小数默认是double),所以要报这个warning,一般改成0.1f就没事了。 

    通常的做法,经常使用double,而不喜欢使用float。

     

    2008年12月21日 8:33
  • double 顾名思义是双精。8字节。

    float是4字节 32位表示浮点型。

    需要注意的是在内存中浮点型(double, float)的保存形式和整形是不同的。它们使用指数形式。

     

    C/C++的浮点数据类型有float和double两种。
    类型float大小为4字节,即32位,内存中的存储方式如下:

     符号位(1 bit) 
    指数(8 bit) 
    尾数(23 bit) 

     

    类型double大小为8字节,即64位,内存布局如下:

    符号位(1 bit) 
    指数(11 bit) 
    尾数(52 bit) 

     

     
    符号位决定浮点数的正负,0正1负。
    指数和尾数均从浮点数的二进制科学计数形式中获取。
    如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由此可知指数为1,尾数(即科学计数法的小数部分)为01。
    根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011 1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):

    符号位 
    指数 
    尾数 


    1000 0000 
    010 0000 0000 0000 0000 0000 


    100 0000 0000 
    0100 0000 0000 0000 0000 0000 0000
    0000 0000 0000 0000 0000 0000 

     

     

    2008年12月22日 2:28
    版主