JAVA--详细说说Float的二进制存储

基础知识:

1. Float类型占4个字节,也就是32bit,其中最高位是符号位,2~9位是指数位,后边的23bit是数值位.如下所示:

符号位 指数位 数值位
1bit 8bit 23bit
共32bit

2. 大部分数据的二进制形式都可以用科学计数法表示,即1.m*2^n这种形式,只要知道m和n,就能确定一个数值,float中指数位记载的就是n,数值位记载的就是m.

 

简单示例:

我们先来个简单的例子:4.5f是怎么存储的?

我们将十进制的4.5转换成二进制:

100.1

相应的,它的科学计数法是这样的:

1.001*2^2

其中小数点后面的001就是我们刚才说的m,所以4.5f的后23位就是:

0010 0000 0000 0000 0000 000

指数是2,但是这个2可不是直接存在指数位上的,它采用的方法叫移位存储

什么是移位存储?

首先你要知道的是指数位的取值范围是-127~128,这个跟byte不一样,byte是-128~127,float的指数位不用最高位表示正负,它存储的是当前值加上127之后的值的二进制,比如-1在指数位中存储的是-1+127=126的二进制,也就是0111 1110,为什么加127呢?因为最小值就是-127,加上127后可以保证所有值都是大于等于0的,就不需要符号位了.同样的,如果指数位的取值范围是-128~127的话,就应该是加1

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值