c语言浮点类型存储

浮点类型存储:

首先我们看看整数类型存储的存储范围:

signed char                : -2^7 2^7 -1
unsigned char           :        0,2^8 -1   
signed short        :            -2^15 ,2^15 -1
unsigned short    :              0,2^16 -1   
int                        :     -2^31 ,2^31 -1
unsigned int           :          0,2^32 -1 

二进制:

计算机中如何表示正负:
	用二进制的最高位来表示正负  0表示正  1表示负
	"最高位":  每种类型 二进制位数不一样  但一定要是从左往右第1个二进制位
二进制:
	原码:用二进制的最高位来表示符号位 0表示正 1表示负
	反码:正数的反码和原码一样  负数的反码 符号位不变,其它位按位取反
	补码:正数的补码和原码一样  负数的补码 等于其原码 符号位不变(一定要为1),其它位按位取反+1

为什么二进制要发明反码和补码,为什么不直接使用原码?
	是因为用原码进行数学计算时 结果不正确

非常重要:
	计算机中存储数据都是以**补码**的形式存储。
如何把一个十进制的数换算成二进制?
	除2求余   二进制是从下往上

举个例子:
-5+3= 2
-5用二进制原码为1000 0101
经过取反加一得到补码 1111 1011
3的原码与补码一样都为0000 0011
相加即为 :原码1000 0010 <— 1111 1101 <— 补码1111 1110 = -2
二进制转八进制:
三个二进制位对应一个八进制位
二进制转十六进制:
四个二进制位对应一个十六进制位

浮点类型存储:

float: 4byte ±3.4*10^38
存储方式和整数是不一样的
32bit = 1符号位+8个指数位(指数有正有负)+23个小数位

	5.5   ==>  0101.1
		--> 1.011 * 2^2
		
	5.25  ==>  0101.01
		--> 1.0101 * 2^2
	浮点数首先求二进制 -->  表示成  1.xxxx  * 2^y 次方
		xxxx 就是用23个小数位来存储
		y  就是指数位存储
	0.25 ==> 0.01  -->  1.0 * 2^-2
	最大值:
		+-1.1111111 (小数点后有23个1) * 2^127
		=(2^0+2^-1+2^-2+....+2^-23)*2^127
		=(2^0+2^-1+2^-2+....+2^-23 + 2^-23-2^-23) * 2^127
		=(2^1 - 2^-23) * 2^127
		= 2^128 - 2^104

同理:double 8byte

	64bit = 1符号位+11个指数位+52个小数位
	=(2 - 2^-52) * 2^1023
	=2^1024 - 2^971
	+-1.79*10^308

ps:2^10 +2^9+ … +2^0 + 2^0 - 2^0 = 2^11 - 1
2^0 +2^-1 +2^-2 +…+2^-23 + 2^-23 -2^-23 = 2^1 - 2^-23

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HOVL_C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值