float在内存中的数据格式及其转byte数组原理及转换过程

float在内存中的数据格式及其转byte数组原理及转换过程
参考文章
转换说明 https://blog.csdn.net/yezhubenyue/article/details/7436624
进制转换 http://www.cnblogs.com/xkfz007/articles/2590472.html


float在计算机的存储
四个字节,共有32位。以“符号”+“移位数”+“底数”的方式存储。三者的计算
第一位是符号,往后八位是“移位数”,再往后23位是“底数”。
32位的格式排列就是
ABBB BBBB BCCC CCCC CCCC CCCC CCCC
A表示符号,正数为0,负数为1
B表示移位数,占了8个字节,所以能表示的大小为0~255。但是,移位数肯定是有正负之分,
当读取这里的值要减去127,故float的移位数可从 -127到128.
当存储这里的值要加上127,故float的移位数可从 -127到128.
C表示底数,底数的计算方式,
当读取该值的时候,看例子一,先在C前面补上1.,意思就是把23个C看成是小数(比如是10100000 0000 0000 0000 0000,我们所要的数就是1.10100000 0000 0000 0000 ),然后根据移位数的值进行移位,再转成十进制的数据
当存取该值的时候,例子二,把数据转为二进制,然后进行移位,直到小数点前面有且只有一位1,然后,把1.去掉,剩下的放到底数位,后面补上0。

例子一:
比如 我现在的数据是 65,72,0,0,转为二进制
01000001    01001000    00000000    00000000
那进行三部分拆分,就是   A:0,B:10000010,C:1001000    00000000    00000000
A部分为0,表示正数
B部分值为130,这移位数就为3
将C值进行转换  1.1001000 00000000 00000000,
根据B值移位2,就变成了 1100.1000 00000000 00000000,
用二进制转十进制算法(@为移位数符号)  1*2@3+ 1*2@2+ 0*2@1+ 0*2@0+ 1*2@-1+ 0*2@-3+。。。
算出结果为12.5
例子二:
比如 我现在的数据是 17.625
先将数据转成二进制(可以查看参考链接,小数进制转换),变成10001.101,  
原则--直到小数点前面有且只有一位1---》   可以算出需要将这个数变成1.0001101
所以,底数就是 0001101,移位数为4+127=131,符号为正的,所以就是
01000001    10001101    00000000    00000000
byte数组就是 65,-115,0,0

猜你喜欢

转载自blog.csdn.net/cmqwan/article/details/80600811