有一些事情让我感到困惑,我没有找到太多关于 VM 规格的信息。这有点晦涩难懂,如果有人可以解释一下,那就太好了。
这几行代码......
double myTest = Double.MAX_VALUE;
System.out.println("1. float: " + (float)myTest);
System.out.println("2. int: " + (int)myTest);
System.out.println("3. short: " + (short)myTest);
System.out.println("4. byte: " + (byte)myTest);
.....产生这个输出:
- 浮动:无穷大
- 诠释:2147483647
- 短:-1
- 字节:-1
byte
,short
并且int
是 8, 16, 32 位,带二进制补码。float
并且double
是 32 位和 64 位 IEEE 754(请参见此处)。
据我了解,a 的最大值double
意味着尾数的所有位(52 位)都切换为 1。因此,转换为短或字节返回 -1 并不(非常)令人惊讶,即所有位都切换到1.演员似乎保留了'尾巴' double
,使其适合 8 位byte
或 16 位short
。
令我惊讶的是演员int
阵容,在较小程度上,演员阵容float
。如何获得“2. int: 2147483647”,即 0x7FFFFFFF,short 和字节 3. 和 4. 为 -1 时的最大值?
演员float
阵容也很奇怪。如果保留 'tail' 的 32 位myTest
,那么它不应该生成一个NaN
?