java double 存储_Java语言中:float、double在内存中存储方式

java语言中,float类型数字在计算机中用4个字节(32位)来存储。double类型占用8个字节(64位)。 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。

按照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法:用符号、指数和尾数来表示。指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。底数定为2,即把一个浮点数表示为尾数乘以2的指数次方再添上符号。

下面是具体的规格:

be3e15352485

以float为例:

因为指数需要减去127,所以float类型的指数可从-126到128。

科学计数法:

格式:SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM

S表示浮点数正负

E表示指数加上127的值后得到的二进制数据

M表示尾数,最高位固定为1

举例:

17.625在内存中的存储为:

首先要把17.625换算成二进制:10001.101。

整数部分:除以2,直到商为0,余数反转。(即:模2取余法)

17 % 2 = 8 ---> 1 低位

8 % 2 = 4 ---> 0

4 % 2 = 2 ---> 0

2 % 2 = 1 ---> 0

1 % 2 = 0 ---> 1 高位

小数部分:乘以2,直到乘位为0,进位顺序取。(即:乘2取整法)

按如下算法进行:

1)首先给小数部分乘2,得到的数,如果小数点前为1;则计1,为0,则计0。

2)再对剩下的小数部分乘2,再计出1或0。

3)重复以上步骤,直至达到需要的精度。

0.625 x 2 = 1.25 ---> 1 -1位

0.25 x 2 = 0.5 ---> 0 -2位

0.5 x 2 = 1.0 ---> 1 -3位

0.0 x 2 = 0.0 ---> 0 -4位

........

以上得到17.625换算成二进制为10001.101。

再将10001.101右移,直到小数点前只剩1位,1.0001101 * 24 ,右移动了四位。

此时,底数和指数就出来了。

底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101

指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011

符号:因为是正数,所以是0

综上所述,17.625在内存中的存储格式是:01000001 10001101 00000000 00000000

如果你觉我写的,对你还有点用,可以关注公众号“微家频道”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值