Java中浮点数的表示方法
表示方法
对于float来说,4个字节,32位,0-22位表示尾数,23-30(8位)表示指数,31位表示符号位。
对于double来说,8个字节,64位,0-51表示尾数,52-62(11位)表示指数,63位最高位表示符号位。
具体分析表示方法
以一道例题开始
public static void main(String[] args) {
float f1=20f;
float f2=20.3f;
float f3=20.5f;
double d1=20;
double d2=20.3;
double d3=20.5;
System.out.println(f1==d1);
System.out.println(f2==d2);
System.out.println(f3==d3);
}
true
false
true
表示如下:注意,指数位要移位存储,即float+127(2^7-1),double+1023(2^10-1)
f:0|1000 0011|0100 0000 0000 0000 0000 000
d:0|100 0000 0011|0100 0000(01后面50个0)
比较的时候是以符号位,指数位,小数位分别比较的,不足的地方以0补齐,所以相等,
符号位均为0;
指数位float减去127,并在前面补0,double减去1023;
尾数位,float末尾补0
所以相等。