我是靠谱客的博主 专注外套,最近开发中收集的这篇文章主要介绍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

最后

以上就是专注外套为你收集整理的float在内存中的数据格式及其转byte数组原理及转换过程的全部内容,希望文章能够帮你解决float在内存中的数据格式及其转byte数组原理及转换过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部