当我学习类型转换时遇到了这么一个例子 :
1 double d = 1109876546299.12334;
2 type t = (type) d;
3 System.out.println(t); // -1
我感到很纳闷... 为什么结果会是 -1 ?
当我想要搜索时却总是找不到对应的文章.
于是希望将原因分享出来
从浮点数到非浮点数的转换有2步:
1) 若是强制转换为long类型则直接转换, 若是其他非long类型则转换为int.
当转换后的结果超出 long/int 的取值范围时:
若是比最大值还大,则采用最大值;
若是比最小值还小,则采用最小值;
2) 然后再将 long/int 类型的数据转换为浮点数
在我遇到的例子里 第2行 会先根据 步骤1 将double转换为int类型
1109876546299 显然大于int最大值 2147483647
然后再根据 步骤2 将 2147483647 转换为byte类型
我的转换过程: 11111111111111111111111 11111111
符号位是1 所以为负数
先取反 再加1: 00000000 + 00000001 = 00000001
转十进制后是 "1" 再加上符号 "-" 所以结果便是 "-1"
在这里感谢 Guadalupe Gagnon 这位大佬为我指点;
这是他推荐给我的相关网页: Type casting into byte in Java - Stack Overflow