我无法理解为什么会这样
float f = Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE);
System.out.println((int)f);
生成相同的行,
以及为什么会这样做
Float f2 = (float) Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE);
System.out.println(f2.intValue());
我的意思是,浮点数的尾数长度是2^23-1
。它如何设法保持整数的max_value,即2^31 - 1
?
答案 0 :(得分:8)
如何设置整数的max_value,即2 ^ 31 - 1?
实际上并非如此。 f
的值为2147483648
。
但是,从float
到int
的{{3}}会限制该值。它涉及到这一部分:
否则,以下两种情况之一必须为真:
值必须太小(大幅度或负无穷大的负值),第一步的结果是int或long类型的最小可表示值。
该值必须太大(大幅度或正无穷大的正值),第一步的结果是int或long类型的最大可表示值。
通过使数字更大,您可以轻松地看到这一点:
float f = Integer.MAX_VALUE;
f = f * 1000;
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println((int)f); // 2147483647
或者通过转换为long
代替,显然不需要在同一点进行限制:
float f = Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println((long)f); // 2147483648