float浮点类型数c语言下在内存中存储,以及其和int型存储的对比

float,int都以二进制方式在内存中存储,都占8字节;

例如int=9;00000000 00000000 00000000 00001001;

那么float的数如何转为二进制如何存呢;

他有一套独特的规矩如下,如果我会在最后几个例子。

根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式: V = (-1)S ∗ M ∗ 2E

• (-1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数

• M 表⽰有效数字,M是⼤于等于1,⼩于2的

• 2E 表⽰指数位

举例来说:

⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2 。

那么,按照上⾯V的格式,可以得出S=0,M=1.01,E=2。

⼗进制的-5.0,写成⼆进制是 -101.0 ,相当于 -1.01×2^2 。那么,S=1,M=1.01,E=2。

IEEE 754规定:

对于32位的浮点数(float),最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M

对于64位的浮点数(double),最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M

                                                           float类型浮点数内存分配

double类型

这段知识转载比特就业课,这是鹏哥让写的作业,所以我转载了所需要的内容。

几个实例方便大家理解

5.0--10进制

101.0(5.0)         二进制表示形式=小数点向左移动2为有效数组变为1.01

(-1)^0*1.01*2^2          ,因为移动了俩位所以是2的2次方(^是次方的意思)

综上s=0

m=1.01

e=2

那么小数点后的位怎么处理呢?

5.5--10进制单独拿0.5出来

0.5—>>0.1 运算过程(1*2^-1)   他的结果就是0.5用小数点后1,0去配凑那位是1就去成2的—几次方

有些数据无法用float精准的去存

0.14-->>0.001  1*2^-3=0.125后面还要去凑位0.015;(令第3位为1成2的负3次方配出0.125)

总之小数点后面用0.1011哪一位是1就用它成—2^负几位次方

反正后面不要写0,1以外的数字,

5.5-->101.1;-1^0*1.011*2^2;

s=0,E=2,M=1.011

根据上图s占1bit

E占8个bit

m剩下的在最后的23bit位前写小数后3位剩下补零

E+127=129如此存进去double类型就加1023(为了修正e为负数的形式,不细讲,float,double有自己的取值范围(就像int 65535那样)不用担心-130,-1040的情况)

所以就是这么存的

0 10000001 01100000000000000000000

所以你懂了吗???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值