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
以二进制格式:
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
为什么将无穷大转换为int和long整数将符号位保持为" 0",同时将符号位设置为" 1"对于字节和短整数?
答案 0 :(得分:10)
将浮点数转换为整数类型T需要两个步骤:
在第一步中,浮点数转换为a long,如果T很长,或者是int,如果T是byte,short,char或int, 如下:
如果浮点数是NaN(§4.2.3),则第一个结果 转换的步骤是int或long 0。
否则,如果浮点数不是无穷大,则 浮点值四舍五入为整数值V,向四舍五入 零使用IEEE 754舍入零模式(§4.2.3)。然后有 两种情况:
如果T很长,这个整数值可以表示为long, 那么第一步的结果就是长值V。
否则,如果此整数值可以表示为int,那么 第一步的结果是int值V。
否则,以下两种情况之一必须为真:
该值必须太小(大幅度的负值或 负无穷大),第一步的结果是最小的 int或long类型的可表示值。
该值必须太大(大幅度的正值或 正无穷大),第一步的结果是最大的 int或long类型的可表示值。
第二步:
如果T为int或long,则转换结果为 第一步。
如果T是byte,char或short,则转换结果为 转换为类型T(第5.1.3节)的结果变窄的结果 第一步。
因此,返回int
首先将无限双值转换为Integer.MAX_VALUE
,然后然后将其转换为byte
/ short
,取适当数量的低字节(结果得到-1)。转化为int
和long
没有额外的步骤,但byte
和short
首先通过int
和<{1}} < em>然后到byte
/ short
。