int 到 long 赋值

2024-05-05

我一直在尝试这个 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(使用前将#替换为@)

int 到 long 赋值 的相关文章