double和float的特殊存储与区别(小白进阶篇)

继续坚持,或些许孤独

导言:

众所周知我们的数据有好多种类型,其中double类型和float类型用于表示小数类型。那么它们会有什么特殊之处呢?接下来就让我们来分析一下:

目录

double类型和float类型的区别(1):

double类型和float类型储存与int类型的不同:

接下来重点来了:

double类型和float类型的区别(2):

练习:

赠言:

答案:



double类型和float类型的区别(1):

这两种类型都用于储存浮点数,但是两者所占的内存空间大小却不一样,double占8个字节;float占4个字节。这就好比我们的int类型和long int 类型两者都用于储存整形但是两者所占的字节却不一样。

double类型和float类型储存与int类型的不同:

这里我们以float类型为例:
浮点数在机内用指数型式表示,分解为: 数符,尾数,指数符,指数四部分:
V==(-1)^S*M*2^E    !!!!!!
  • S(占一个比特位)表示符号位的数字
  • M(23比特位)是数据位的2进制科学计数表示(和10进制的表示一样)
  • E(占8个比特位)表示科学计数的次方

首先我们要明白数据在电脑中是以2进制的形式进行存储的,这里可以看看我的另一篇文章:

数据在计算机中的存储icon-default.png?t=N7T8http://t.csdnimg.cn/CdLIpdouble,float,int 这三种类型都是带符号的。所以还是那样我们的最后一个2进制位表示符号位。其中:“1”表示负数,“0”表示正数。

接下来重点来了:

我们的int 类型:int 有4个字节,32比特位。其数据位从2^0次方,也就是从1开始,31个比特位表示数据的大小,第32个比特位用于表示数据符号。

那么模仿int 类型。​​​如果要储存小数,我们可以将数据的存储从2^-1(0.5)或2^-2(0.25)开始就可以达到表示出小数的效果,但是这样的话将会造成数据的不精确存储。


这里我们double类型和float类型的区别,就再一次出现了:

double类型和float类型的区别(2):

  • float类型  通常是单精度浮点数,它可以表示大约6到7位有效数字,约为7个十进制位。
  • double类型  通常是双精度浮点数,它可以表示大约15到16位有效数字,约为16个十进制
  • #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
        float a=12.257902012398877;
        double b=12.257902012398877;
        const float PI=3.1415926;         // 常量定义
        cout<<setprecision(15)<<a<<endl;  // 只有6-7位有效数字,后面的就不精确
        cout<<setprecision(15)<<b<<endl;  // 有15-16位有效数字,所以完全正确
        cout<<setprecision(15)<<PI<<endl; 
        return 0;
    }

简单来讲就是double比float存储更加精确,但是:double所占的内存空间是float的两倍,使用double类型会使计算机的运行速度减慢。
在C语言中double和float名称是有很大区别的我们不能将两者混写,在数据精度满足时尽量选用float类型进行存储。

练习:

int main()
{
	float i = 3.1415f;
	
	int* pi = (int*)&i;
	printf("%d\n", *pi);

	int x = 9;
	float* p = (float*)&x;
	printf("%f\n",*p );

}

赠言:

人见多了苦难,也就不再想遗憾

答案:

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值