import java.awt.*;
import java.awt.geom.Rectangle2D;
import javax.swing.*;
public class Test
{
public static void main(String[] args)
{
int a=2147483647;
float b=a;
System.out.println(a);
System.out.println(b);
a=214748364;
b=a;
System.out.println(a);
System.out.println(b);
}
}
输出为:
2147483647
2.14748365E9
214748364
2.14748368E8
自己的猜测
输出2感觉是输出1的进位的结果
但是输出3和输出4就完全不懂是什么情况了 我看的是corejava教材
上面写float范围是32位
------解决思路----------------------
这个浮点数在计算机中如何保存有关,具体实现的,楼主可以参考http://www.math.byu.edu/~schow/work/IEEEFloatingPoint.htm
------解决思路----------------------
首先:你自己猜测,输出2感觉是输出1的进位的结果,计算机的运算可不能这么猜测,必须要懂他的原理
我找了找资料
1,先了解float在内存中是怎么存储的
float有32位,存储如下.
2,把214748364这个数字转为2进制
1100110011001100110011001100
3,然后变成这样,从最后1位移动27才形成这样的效果,转化的时候必须形成1.什么的效果
1.100110011001100110011001100
4.按照1步骤的说法
1 10011010 10011001100110011001100
符号 指数 省略了后4位组成的
5,这个好像是内存存储float的方式(为啥说好像呢,因为我也是刚刚看了下资料来的,所以我也不确定对不对)
6,因为省略了后四位,所以精度就错了
7,开始反推回去
第一位说明是正数
后八位代表指数10011010 - 127 = 154 - 127 = 27 为啥减127呢,看资料看的
后面的数加上1. 为 1.10011001100110011001100 ,指数27为正数,所以小数点后移27位,遇到不足的情况(我也不知道补啥)
我就补1了,变为1100110011001100110011001111 十进制为214748367. 2.14748367E8 ,跟你的差1,不知道为什么