6

我不明白为什么会这样

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

4

1 回答 1

8

它如何设法保持整数的最大值,即 2^31 - 1?

它实际上没有。的f值为2147483648

但是,窄化原始转换from floatto 会int限制该值。它到了这一部分:

  • 否则,以下两种情况之一必须为真:

    • 该值必须太小(一个大的负值或负无穷大),第一步的结果是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
于 2013-05-15T06:13:38.743 回答