Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么将零除法转换为整数基元会得到不同的结果?_Java_Casting_Binary_Primitive Types - Fatal编程技术网

Java 为什么将零除法转换为整数基元会得到不同的结果?

Java 为什么将零除法转换为整数基元会得到不同的结果?,java,casting,binary,primitive-types,Java,Casting,Binary,Primitive Types,结果是: System.out.println((byte) (1.0/0)); System.out.println((short) (1.0/0)); System.out.println((int) (1.0/0)); System.out.println((long) (1.0/0)); 二进制格式: -1 -1 2147483647 9223372036854775807 为什么将无穷大转换为整数和长整数会使符号位保持

结果是:

    System.out.println((byte) (1.0/0));
    System.out.println((short) (1.0/0));
    System.out.println((int) (1.0/0));
    System.out.println((long) (1.0/0));
二进制格式:

    -1
    -1
    2147483647
    9223372036854775807
为什么将无穷大转换为整数和长整数会使符号位保持为“0”,而将字节和短整数的符号位设置为“1”

将浮点数缩小为整数类型T需要两个步骤:

在第一步中,将浮点数转换为 long,如果T是long,或者是int,如果T是byte、short、char或int, 详情如下:

如果浮点数为NaN(§4.2.3),则第一个 转换的步骤是整数或长0

否则,如果浮点数不是无穷大,则 浮点值四舍五入为整数值V,向四舍五入 使用IEEE 754四舍五入归零模式(第4.2.3节)归零。还有 两个案例:

如果T是长的,这个整数值可以表示为长的, 那么第一步的结果就是长值V

否则,如果该整数值可以表示为int,则 第一步的结果是int值V

否则,以下两种情况之一必须为真:

该值必须太小(较大的负值或 负无穷大),第一步的结果最小 int或long类型的可表示值

该值必须太大(大幅度的正值或 正无穷大),第一步的结果是最大的 int或long类型的可表示值。

第二步:

如果T是int或long,则转换的结果是 第一步

如果T是byte、char或short,则转换的结果是 将试验结果缩小为T型(§5.1.3)的结果 第一步。


因此,通过返回
Integer.MAX_value
,首先将一个无限大的双精度值转换为
int
,然后将其进一步转换为
字节
/
,从而获得适当的低字节数(结果为-1)。对
int
long
的强制转换没有额外的步骤,但是
byte
short
先通过
int
,然后到
byte
/
short

我假设它先转换为
int
,然后转换为
byte
注:Integer.MAX_值是
int
最接近无穷大的值。Thx-Peter,但是,将整数、最大值“长”转换为“214783647 L”,是不是?“彼得劳瑞不可能将<代码>(1/0)< /代码>评估为<代码>双< /代码>,然后种姓到字节考虑底部8位?虽然IEEE 754为
double
float
定义了标准,但我发现奇怪的是
int
的符号位为0,因为文档没有为
int
定义无限规范。您不能将
整数。最大值
转换为
long
。如果类型为
long
,则在+Infinity的情况下选择最大可表示值,即
long。MAX_value
@DebosmitRay
int
最大可表示值的顶部位为0,当转换为short或byte时,顶部的位是
1
。我还想提到缩小原语转换+1.
    1111 1111
    1111 1111 1111 1111
    0111 1111 1111 1111 1111 1111 1111 1111
    0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111