基础知识:
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