C++浮点型变量的存储方式

1 浮点类型简介

浮点型是C++定义的基本类型。类型float、double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。在Visual Studio中,float类型用4个字节表示,double和long double用8个字节表示。

默认的浮点字面值常量为double类型。在数值的后面加上F或者f表示单精度,在数值后面加上L或者l表示扩展精度。

 

float x = 3.1415F;
double y = 3.1415;
long double c = 3.1415L;

2 浮点类型的存储方式

 

2.1 单精度浮点数的存储方式

2.1.1 结构

在前文中提到,单精度浮点float类型占4个字节,即4×8=32位。在32位二进制数中,包含了符号、指数和尾数三个部分,如图1所示。

图1 单精度浮点数的结构

可以用十进制或者科学记数法来表示浮点数。十进制的表示方式在“1 浮点类型简介”中已经介绍。科学记数法的表示方式如下

 

float x = 1.23E3F;
float y = -4.56e-2f;

对于单精度浮点数类型的变量x,其符号为正,指数为3,尾数为1.23;对于变量y,其符号为负,指数为-2,尾数为-4.56。

 

2.1.2 存储方式

对于单精度变量x

 

float x = 10.125f;

其在内存中的存储方式是怎样的呢?首先要将x变成二进制格式,二进制与十进制的对应如表1所示:

 

表1 二进制与十进制的对应关系

二进制

1000

100

10

1

0.1

0.01

0.001

0.0001

十进制

8

4

2

1

0.5

0.25

0.125

0.0625

根据表1所示,因为变量x的值10.125,所以其转换成二进制后的格式为1010.001。

接下来将其再转换为科学计数法的方式,将小数点向左移动3位,即指数为3,因此此时x的表达方式是2进制,所以底数为2。即x的二进制科学计数法的格式为1.010001×2^3。所以,对于值为10.125的单精度浮点类型的变量x来说,其符号位为正,指数为为3,尾数为010001。

需要注意的是,对于图1所示的符号位,0表示正数,1表示负数。而指数位的起始值是127,如果此时指数为3,则指数位的值是127+3=130,即10000010,其结构如图2所示。

图2 10.125的存储方式

 

其二进制格式为0100 0001   0010 0010   0000 0000   0000 0000,十六进制格式为41  22 00  00。因为变量使用主机字节序存储(大头big-endian),即低地址保存数值的低位,高地址保存数值的高位,所以值为10.125的单精度浮点变量x的值是00 00 22 41。

2.1.3 取值范围及精度

(1)取值范围

在“2.1.2 存储方式”中提到,单精度浮点数float保存指数的内存大小是8位,且起始值是127,所以浮点数指数的最大值是(2^8-1)-127=128。则单精度浮点数float的取值范围是-2^128~2^128,即-3.4E38~3.4E38。

(2)精度

在“2.1.2 存储方式”中提到,单精度浮点数float保存尾数的内存大小是23位,2^(-23)≈0.000000119,四舍五入为0.0000001,即7位。也就是说,将浮点数转化为二进制科学表达式后,其有效位数为7时,都可以精确表示,即精度为7位。

例如:

 

float x = 1234.567f;

此时x的值为1234.567;

 

 

float y = 1234.5678f;

此时y的值是1234.566。

 

2.2 双精度浮点数的存储方式

2.2.1 结构

在前文中提到,双精度浮点double类型占8个字节,即8×8=64位。在64位二进制数中,包含了符号、指数和尾数三个部分,如图3所示。

 

图3 双精度浮点数结构

 

2.2.2 存储方式

双精度浮点数double与“2.1.2 存储方式”中提到的单精度浮点数float的存储方式相同。

2.2.3 取值范围及精度

(1)取值范围

在“2.2.2 存储方式”中提到,双精度浮点数double保存指数的内存大小是11位,且起始值是1023,所以浮点数指数的最大值是(2^11-1)-1023=1024。则双精度浮点数double的取值范围是-2^1024~2^1024,即-1.79E308~1.79E308。

(2)精度

正如“2.1.3 取值范围及精度”中提到的计算单精度浮点数float精度的方法,双精度浮点数double的尾数是52位,所以双精度浮点数double的精度是15位。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值