浮点类型

    在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