程序:
public static void main(String[] args) {
int a = 49969950;
System.out.println((float) a);
}
输出结果:
4.9969952E7
是怎么运算的呢?
49969950是我们认知的十进制,但是计算机是只认0和1的。
所以49969950的二进制表现形式为10111110100111101100011110,这是整型没有问题。
如果把这个数值转成float会发生什么呢?
float的存储结构
float 在内存种占4个字节,32位
从高位到地位排列:1位符号位 + 8位指数位 + 23位尾数位
浮点数的存储是使用科学计数法
根据float存储类型来换算
49969950 对应的二进制为10111110100111101100011110,用二进制科学计数法表示就是1.0111110100111101100011110*225
225表示2的25次方
但是由于float类型的小数位是23位,实际上是25位,那么这里在实际存储的时候就会改变,
1.01111101001111011000111 10*225实际存储为:
1.01111101001111011001000 *225
这个转换为二进制就是
10111110100111101100100000
这个二进制转换成十进制的数值就变成了49969952
进制转换网站:https://www.h-schmidt.net/FloatConverter/IEEE754.html