繁体   English   中英

为什么在Java中将无穷大转换为字节或短等于-1? [重复]

[英]Why does casting infinity into byte or short equal -1 in Java? [duplicate]

这个问题已经在这里有了答案:

最近我发现,如果您使用double或float并将其除以0,则会得到无穷大的值。 我将无穷大转换为每种数据类型(通过写入(byte)variable(short)variable等),我发现如果将其转换为byte或short则其值为-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;

另外请注意, 转换没有转换

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM