dhb*_*lah 6 java floating-point
我无法理解为什么会这样
float f = Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE);
System.out.println((int)f);
Run Code Online (Sandbox Code Playgroud)
产生相同的线,
以及为什么这样做
Float f2 = (float) Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE);
System.out.println(f2.intValue());
Run Code Online (Sandbox Code Playgroud)
我的意思是,浮点数的尾数长度是2^23-1.它如何设法保持整数的max_value,这是2^31 - 1?
它如何设法保持整数的max_value,即2 ^ 31 - 1?
它实际上没有.价值f是2147483648.
然而,基本收缩转换从float到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
Run Code Online (Sandbox Code Playgroud)
或者通过铸造long代替,显然不需要在同一点进行夹紧:
float f = Integer.MAX_VALUE;
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println((long)f); // 2147483648
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |