【发布时间】:2019-06-30 15:10:18
【问题描述】:
嗨,我最近看到一个类似这样的问题
int a= (int) Math.pow(2,32);
System.out.println(a); //prints out Integer.MAX_VALUE
在我回答问题后发现我错了,我回答了 Integer.MIN_VALUE 但正确答案是 Integer.MAX_VALUE。经过进一步测试后,我意识到我将任何双精度转换为大于 Integer.MAX_VALUE 的 int 只会使 int 等于 Integer.MAX_VALUE。 例如
int a = (int) ((double) Integer.MAX_VALUE+100);
System.out.println(a); //prints out Integer.MAX_VALUE
经过进一步测试,我意识到如果您尝试将 long 转换为 int,它似乎会将 int 分配给看似随机的数字。
所以我的问题是。到底发生了什么,为什么当你将它转换为int时,double值不会溢出整数?以及为什么将 long 转换为 int 会返回一个看似随机的数字
【问题讨论】:
-
不是随机数。它是最右边的 32 位。
-
我猜双重转换包含像
if( int_val > Integer.MAX_VALUE ) { return Integer.MAX_VALUE; }这样的代码,当然 C 语言除外。您是否尝试过查看 Open JDK 项目中的源代码?
标签: java casting integer double long-integer