[菜鸟谢谢大家了]关于强制类型转换中double转int问题
强制类型换中double转int时,是将小数位后面的舍去
可是,当要转换的double类型的数值大于int的取值范围,也就是大于2147483647时,
转换后的数总是2147483647,这是为什么呢?
我理解中,应该是,舍去小数位后,再把得到的整数的前4个字节砍掉,剩下的就应该是转换后的数
按我的理解,比如2147483648.123这个数,转换时,先将小数点后去掉,变成2147483648,
由于int型最大数为2147483647,所以强制转换后,在内存中2147483648表示的数应该是-2147483648。
这个过程,相当于先把double强制转换成long,然后,再由long 转成int。
可是我做了好多实验,只要比2147483647这个数值大的double型,强制转换成int时,都是214748367。
呵呵,由于是刚刚接触程序语言,对内存什么的机制可能不太明白,这里面有什么别的原因么?
为什么long转int时,会把超出4个字节的部分砍掉,而double转int时确总是2147483467呢?
(下例中的e1和e3做比较)
用下面的小程序示例:
public class TestConvert2{
public static void main(String[] args){
double i = 4294967296.123;//4294967296是(2×2147483648)的结果,方便看结果
int e1 = (int)i;//超出整形取值范围,结果为2147483647,为什么不是0?
long e2 = (long)i;//去掉小数点后面,结果为4294967296
int e3 = (int)e2;//砍掉内存中超过4字节的部分,结果为0
System.out.println(e1);
System.out.println(e2);
System.out.println(e3);
}
}