浮点数在内存中的存储形式

浮点数在内存中的存储形式
原链接:https://blog.csdn.net/kantswang/article/details/80806465

a.他是以实型的数据来存储的,即指数的形式来存储的。由于指数形式的小数点可以随便的移动,就像可以浮动似的,所以把这种形式称为浮点数。

b.这里要说的规范化的指数形式:小数点前一位的数字为0,小数点后第一位的数字不为0。

c.存储的形式:如下图

23 + 8 + 1 = 32

为什么要有偏置量:
是为了把原来的7位都填充为1,留出最高位出来。在此基础上进行相加或相减,所以为什么float默认小数点的位数是6位。

尾数的整数部分恒为1,所以整数部分不需要存储,只存小数的部分。

        小数部分求二进制如果不满23位,则补相应的0;

        小数部分求二进制如果是死循环,则算到23位为止。

d.实际的例子:float a = 125.5;

 125 : 0111 1101               0.5:1

 125.5二进制:111 1101 . 1

 阶数:1.11 1101 1 * 2 ^ 6,阶数为6。float的偏置量是127。127 + 6 = 133,阶数的二进制为:1000 0101。

 尾数:11 1101 1, 由于规定尾数的整数部分恒为1,要求尾数要达到23位

所以尾数的二进制为:111 1011 0000 0000 0000 0000

125.5内存中的存储形式为:   

0 10000101 11110110000000000000000,则在内存中存放方式为:

00000000   低地址

00000000

11111011

01000010   高地址

关于小数转换为二进制。

整数和小数分别转换。
整数除以2,商继续除以2,得到0为止,将余数逆序排列。
22 / 2 11 余0
11/2 5 余 1
5 /2 2 余 1
2 /2 1 余 0
1 /2 0 余 1
所以22的二进制是10110

小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列。
0.8125x2=1.625 取整1,小数部分是0.625
0.625x2=1.25 取整1,小数部分是0.25
0.25x2=0.5 取整0,小数部分是0.5
0.5x2=1.0 取整1,小数部分是0,结束
所以0.8125的二进制是0.1101
十进制22.8125等于二进制10110.1101

0.6 * 2 = 1.2 ----------- 1

0.2 * 2 = 0.4 ------------ 0

0.4 * 2 = 0.8 ------------ 0

0.8 * 2 = 1.6 ------------ 1

0.6 * 2 = 1.2 ------------- 1

0.2 * 2 = 0.4 ------------- 0

0.4 * 2 = 0.8 -------------- 0

0.8 * 2 = 1.6 -------------- 1

1 0 0 1 1 0 0 1

1111101.1001 1001 1001 10011

1.111101 1001 1001 1001 100

127 + 6 = 133 1000 0101

1111 0110 0110 0110 0110 0

01000010

11111011

00110011

001100

 反过来计算的话:    

由于符号为为0,则为正数。阶码为133-127=6,尾数为11110110000000000000000,则其真实尾数为1.1111011。所以其大小为1.1111011*2^6,将小数点右移6位,得到1111101.1,而1111101的十进制为125,0.1的十进制为1*2^(-1)=0.5,所以其大小为125.5。

同理若将float型数据0.5转换为二进制形式:

0.5的二进制形式为0.1,由于规定正数部分必须为1,将小数点右移1位,则为1.0*2^(-1),其阶码为-1+127=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位00000000000000000000000,则其二进制表示形式为

0 01111110 00000000000000000000000

由上分析可知float型数据最大表示范围为1.11111111111111111111111*2127=3.4*1038

对于double型数据情况类似,只不过其阶码为11位,偏置量为1023,尾数为52位。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值