我一直在尝试这个 int 和 long 转换,我尝试分配一个int
变量为along
多变的。代码如下:
public static void main(String []args){
int i = 1024;
long j = i;
long k = i*i*i*i;
System.out.println("j= " +j+ ", k= " +k);
}
所以,在打印时j
,它只是给出了一个输出1024
。但打印时k
,它显示了溢出(k
=0)。我通过使用这种技术解决了这个问题,我已经明确地投射了每个i
to long
. i.e.
public static void main(String []args){
int i = 1024;
long j = i;
long k = ((long)i)*((long)i)*((long)i)*((long)i);
System.out.println("j= " +j+ ", k= " +k);
}
现在,它显示了两者的正确值j
and k
。
所以,我想知道为什么需要这样做int
在第二种情况下,但在第一种情况下则不然。k
, 成为一个long
可以在这个繁重的赋值之后保留这个值。但是,为什么它没有被正确分配呢?
原因是你的线路
long k = i*i*i*i;
可以被认为是
long k = ((i*i)*i)*i;
or...
int k1 = i*i;
int k2 = k1*i;
int k3 = k2*i;
long k = k3;
所以当任何一个kn
溢出,你会得到错误。
当你进行转换时,你显然是通过总是相乘来规避这个问题long
在一起。
当然,对初始程序最简单的修改是定义i
as a long
立即,而不是int
.
long i = 1024L;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)