浮点类型

本文详细介绍了C++中浮点数的表示类型,包括float、double和longdouble的区别,并以float为例深入解读了其IEEE存储格式。通过实例演示了如何将浮点数转换为IEEE格式,并提供了测试代码验证转换结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在C++中,小数用浮点类型来表示。浮点类型主要有3种,float、double、long double,它们主要的差别是数据的表示范围不同。C++标准指定了一个浮点数有效位数的最小值,然而大多数编译器都实现了更高的精度。通常,float用32位来表示,double用64位来表示,long double的长度根据编译器的不同而不同,通常是8字节,12字节,16字节。

    在计算机中,虽然它们的长度不同,但是它们的存储原理相同,只是指数部分和尾数部分的长度不同。

    下面,我们以float为例,来讲解一下IEEE的存储原理。

   

图1 float的IEEE存储格式

    如图1所示,float在内存中占用4个字节,其中符号占用1位,正号用0表示,负号用1表示。指数部分用8位来表示,尾数部分用23位来表示。为了方便大家理解,下面,我们一起来转换一个小数为IEEE的存储格式。

例1 将float类型的8.25转换为IEEE存储格式

解:

    1、转换8.25为二进制:1000.01。

    2、移动小数点,使小数点前的整数部分为1,1000.01表示为1.00001 * 2^3。

    3、根据第2步的结果填充内存:

    a )因为是正数,所以符号位为0。

    b )将指数部分加127,所以指数部分为3+127=130,转换为二进制为10000010。

    c )去掉最左边的1,将剩余的00001扩展至23位,即00001000000000000000000。

    4、最终结果为:0 10000010 00001000000000000000000,转换为16进制为:0x41 0x04 0x00 0x00,按照小端存放:0x00 0x00 0x04 0x41。

测试代码如下:

#include <stdlib.h>
#include <stdio.h>
void main()
{
	float f = 8.25;	
	system("pause");
	return;
}
测试结果如图2所示:

图2 测试结果图

    如图2所示,我们的推断结果与事实相符。

    今天,我们主要讲了浮点类型的种类,以及float的IEEE存储方式。double与float类似,只是指数部分不是8位,而是11位,尾数是52位,总位数64位。希望大家回去多实践,加深对float存储格式的理解。

转载于:https://www.cnblogs.com/new0801/p/6176946.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值