今天写一写我对float变量的理解,我也是学习了网上的一些作者的看法,现在用最白的白话文记录下我对float变量存储格式怎么存储最大值和最小正值的理解。

float类型 java float类型最大正整数_数位

首先上面的单精度格式大家都知道,IEEE(Instituteof Electrical and Electronics Engineers (IEEE)指定的格式,也许是因为这样设计更加科学吧。

float型变量存储格式被安排32个bits(1个bit就是一个由并联和串联的电路组合,可以在command指令下让其通电(0)还是断电(1))。其中如图所示,31位被安排了符号,指数位安排了8个bits(其中30号位也是符号位,是指数的符号位),尾数位安排了23个bits

随机选一个十进制数23.125,转为二进制数为:10111.001

换算成科学计数法10111.001=1.0111001

其中标红部分(0111001)就是将要保存到float格式中的尾数位(那么二进制整数位1为什么不用保存呢,是因为这是个定值,保存在隐藏位了)

指数4就是将要保存到float格式中的指数位,4是个十进制数,保存到计算机中需要换算成二进制,即100,但是这样还不能直接存储到指数位置,这是因为指数位采用移位存储技术,意思就是,8bits的空间可以本可以存储256个十进制正值,但是因为由于有负指数的需求,所以IEEE指定127到0计为负,127 到 255为正,且255和0表示无穷值,不能输出!所以正指数最大值只有127是可以输出实际值,负指数只有-126是可以输出实际值的。

当指数为+4时,指数位置需要表示的十进制数就是127+4=131,换算成二进制为10000011才能被计算机认为是4!

那么,十进制数23.125的储存到float格式中就是

0

1

0

0

0

0

0

1

1

0

1

1

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

那么,我们反过来算float格式中能存储的最大数值,当指数位最大值为127,尾数位为.11111111111111111111111时,

max=1.11111111111111111111111*2^127≈3.4*10^38

当指数位最大值为-126,尾数位为.0时,

min=1*2^-126≈1.175*10^-38