为什么在Java中将无穷大转换为字节或短字符等于-1



最近我发现,如果取一个双精度或浮点值,并将其除以0,则得到无穷大的值。我将无穷大转换为每种数据类型(通过编写(byte)variable(short)variable等(,发现如果将其转换为字节或短数据类型,则会得到值-1,但如果将其转化为任何其他数据类型,将得到其最大值。我想知道为什么会发生这种事。有人猜到了吗?

这是我用来测试它的代码。

double dsa = 1.00 / 0;
System.out.println("Byte");
System.out.println((byte)dsa);
System.out.println(Byte.MAX_VALUE + "n");
System.out.println("Short");
System.out.println((short)dsa);
System.out.println(Short.MAX_VALUE + "n");
System.out.println("Integer");
System.out.println((int)dsa);
System.out.println(Integer.MAX_VALUE + "n");
System.out.println("Long");
System.out.println((long)dsa);
System.out.println(Long.MAX_VALUE + "n");
System.out.println("Float");
System.out.println((float)dsa);
System.out.println(Float.MAX_VALUE + "n");
System.out.println("Double");
System.out.println((double)dsa);
System.out.println(Double.MAX_VALUE + "n");

控制台给我的是:

Byte
-1
127
Short
-1
32767
Integer
2147483647
2147483647
Long
9223372036854775807
9223372036854775807
Float
Infinity
3.4028235E38
Double
Infinity
1.7976931348623157E308

因为正无穷大被定义为0x7ff0000000000000。来自Double类源代码:

/**
* A constant holding the positive infinity of type
* {@code double}. It is equal to the value returned by
* {@code Double.longBitsToDouble(0x7ff0000000000000L)}.
*/
public static final double POSITIVE_INFINITY = 1.0 / 0.0;

另外请注意,铸造不是转换

最新更新