java - 为什么在Java中将无穷大转换为字节或短等于-1?
问题描述
最近我发现,如果你取一个 double 或 float 并将它除以 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;
另请注意,铸造不会转换。
推荐阅读
- java - Vaadin 8:更改描述的背景颜色(工具提示)
- events - 在事件驱动的系统上保留已发布的事件是否至关重要?
- reactjs - 如何设置nextjs路由器查询参数
- angular - 使用管道或其他方式角度美化数据
- angular - 什么是“Angular 根文件夹”
- json - Spring RestTemplate 无法处理英镑符号
- java - com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.harry.foodapp.Model.AdminOrders 类型
- python - 一行代码python中的if-else语句;语法错误
- html - 视频不显示在移动设备上
- java - 从 AWS s3 存储桶上传文件