当前位置: 首页 > 知识库问答 >
问题:

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

蔺弘
2023-03-14

最近我发现,如果你把一个双精度或浮点数除以0,你会得到无穷大作为值。我把无穷大转换成每种数据类型(通过编写(字节)变量(短)变量等),我发现如果你把它转换成字节或短,它会给出-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

共有1个答案

傅雪松
2023-03-14

因为正无穷大定义为0x7ff0000000000000。从类源代码:

/**
 * 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代码 打印’Infinity’且未定义。这在数学上不是错吗? 问题答案: 在数学中,有许多支持算术的不同结构。最突出的数字(例如自然数,整数和实数)不包括无穷大。在那些系统中,不支持除以零。 其他系统的确包含至少一个无穷大。参见,例如,真实的投影线。它确实允许被零除。 只有一种方法可以知道在特定系统中数学定义或未定义的内容-研究该系统。 类似地,操作是可交换的(a

  • 问题内容: 我可以通过将L附加到值来创建文字。为什么我不能以类似的方式创建字面量的short或byte?为什么我需要在转换时使用int文字? 如果答案是“因为C中没有短文字”,那么为什么C中没有短文字? 这实际上并没有以任何有意义的方式影响我的生活;写(短)0而不是0S很简单。但是这种矛盾使我感到好奇。这是当您深夜起床时困扰您的事情之一。有人在某个时候做出了设计决定,使得可以为某些原始类型输入文字

  • 为什么Java中的以下代码 打印“无穷大”而不是未定义。这在数学上不是错的吗?

  • 所以,实际上我对Java编程语言还是新手,并且还在学习如何转换数据类型,所以在这种情况下,我很难将字节转换为短字节。你们能帮帮我吗?? 所以在这种情况下,我可以正常地从(int)转换为(long)数据类型,因为(long)数据大小大于(int)。这与我尝试将其从(short)转换为(int)时的情况相同。但为什么我不能使用这个概念将数据类型从(byte)转换为(short)??即使(短)数据大小大