long型占用8个字节的存储空间,即64bit,最左边一位是符号位,0表示正,1表示负,其余63位存储数值,所以long型可以表示的数值范围为-263到263-1。而float型占用4个字节,即32bit,所表示的数值范围为-3.403E38到3.403E38,这个数值范围是要大于long型所表示的数值范围的。为什么会这样呢?要搞懂这个问题,就先要明白float型是如何存储的。
如图,左边第一位为符号位,0表示正,1表示负。上图中sign为0,所以为正数。float型占用4个字节,即32位,其中1位为符号位,8位指数位,23位尾数位(尾数位代表的是小数点后的值,所以尾数位最大值为1)规定指数位从01111111(二进制)开始记,因为八位最大值为11111111(二进制)所以可得指数位最大代表2^127次方,而尾数位最大值约等于1所以可得float型可表示的范围约为2^()-127-----2^127方。
总结
float型它有指数部分,规约数的指数可以表示到2的127次方,差不多是1038这么大。即我们知道哪个是符号位,哪些是指数部分,哪些是小数部分,以及省略的最高位的1,所以float型32个bit才能存下这么多信息。float的范围虽然大,但它不能表示他所在范围内的所有数字,而int就可以,所以float是以损失精度为代价扩大表示范围的。