探寻float的表示范围

C语言中的基本数据类型

字符类型           char            1字节     [-128,127]       	
无符号字符类型     unsigned char   1字节     [0,255]	
短整数类型         short           2字节     [-32768,32767]	 
                  unsigned short            [0,65533]	
                  short int
                 unsigned short int 		
整数类型           int             4字节     [-2^31,2^31 -1]				
		  unsigned int              [0,2^32 -1]		
长整数类型         long int        4字节/8字节 		
		  long		unsigned long int 
长长整数类型       long long int   8字节		
单精度浮点类型     float           4字节           +-3.4*10^38		
双精度浮点类型     double          8字节           +-1.78*10^308

同样是4个字节,为什么int和float表示的范围却有这么大的差异?

int     -2147483648,2147483647 	    
float   +-3.4*10^38

int类型简单介绍下

		32位无符号整数 ,  其表示范围是2的32次方,最大整数为 2的32次方-1
		有符号数则要去除一个符号位,其表示范围是[-2^31,2^31-1]

有符号数则要去除一个符号位,正数最大为2的31次方-1 , 负数最小为负 2的31次方
而float类型组成是由1个符号位 8个指数位 23个尾数位 1+8+23=32

0|1  8个指数位  -128,127 在这里计算一下float的取值是如何得出的
最大值0 127  .11111111...11111
先说小数部分,因为有23个小数位,所以最大的情况为23个1(0.1111111....1111111),即为1-2^-23
但是IEEE 754标准规定了一个隐含的1(用于节省1个位的空间),不在这23位中,所以整数部分有个1,
指数部分有8位,最大情况为0111 1111即127,所以float的最大表示为(1+(1-2^-23))*2^127,
化简得2^128 - 2^14
最小值  1   127   .11111...1111111   同理可得了
精度范围: 小数点后 6-7位		前5位肯定是精确的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值