Java中的float浮点数的二进制存储及运算

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

float在计算机的存储

四个字节,共有32位。以“符号”+“移位数”+“底数”的方式存储。

三者的计算

第一位是符号,往后8位是“移位数”,再往后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,

用二进制转十进制算法(@为移位数符号) 12@3+ 12@2+ 02@1+ 02@0+ 12@-1+ 02@-3+。。。
算出结果为12.5

例子二:

比如 我现在的数据是 17.625

先将数据转成二进制(可以查看参考链接,小数进制转换),变成10001.101,

原则–直到小数点前面有且只有一位1—》 可以算出需要将这个数变成1.0001101

所以,底数就是 0001101,移位数为4+127=131,符号为正的,所以就是

				01000001    10001101    00000000    00000000

byte数组就是 65,-115,0,0

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值