Sha*_*dra 15 java int long-integer
我一直在尝试这个int和long转换,我尝试将int变量long赋给变量.代码如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
因此,在打印时j,它只是给出了输出1024.但是在打印时k,它显示溢出(k= 0).我通过使用这种技术解决了这个问题,我已经明确地将每个问题都转换i为了long.即
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);
}
Run Code Online (Sandbox Code Playgroud)
现在,这既表现出的正确的价值观j和k.所以,我想知道为什么需要int在第二种情况下进行投射,而不是在第一种情况下投射.在这个繁重的任务之后k,作为一个long可以保留这个值.但是,为什么没有正确分配?
dav*_*v_i 19
原因是你的路线
long k = i*i*i*i;
Run Code Online (Sandbox Code Playgroud)
可以被认为是
long k = ((i*i)*i)*i;
Run Code Online (Sandbox Code Playgroud)
要么...
int k1 = i*i;
int k2 = k1*i;
int k3 = k2*i;
long k = k3;
Run Code Online (Sandbox Code Playgroud)
因此,当任何kn溢出时,您会收到错误.
当你进行演员表演时,你总是将longs 乘以一起来避开这个问题.
当然,你的初始程序最简单的修改是定义i为一个long直线距离,而不是一个int.
long i = 1024L;
Run Code Online (Sandbox Code Playgroud)
小智 7
此问题基于不同类型使用不同内存量的事实.int和long都是Integers,区别在于int是4个字节,而long是8个字节.
让我们稍微修改你的代码:
public class Test {
public static void main(String []args){
int i = 1024;
long j = i;
long k = i*i*i;
System.out.println("My multipliers are of type int:");
System.out.println("j= " +j+ ", k= " +k);
System.out.println("Is k less than Integer.MAX_VALUE: " + (k < Integer.MAX_VALUE? "YES" : "NO"));
k = i*i*i*i;
System.out.println("j= " +j+ ", k= " +k);
//now multiplying with j instead of i
System.out.println("\nNow Im working with a long type:");
k = j*j*j;
System.out.println("j= " +j+ ", k= " +k);
System.out.println("Is k less than Integer.MAX_VALUE: " + (k < Integer.MAX_VALUE? "YES" : "NO"));
k = j*j*j*j;
System.out.println("j= " +j+ ", k= " +k);
System.out.println("Is k less than Integer.MAX_VALUE: " + (k < Integer.MAX_VALUE? "YES" : "NO"));
k = j*j*j*j;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码显示,当你乘以i 3次时,结果是一个小于Integer.MAX_VALUE(即2147483647)的值,当你将它乘以4次时,结果为0,因为穷人中没有足够的位置4个字节的乘法器.:)但是你可以看到,当乘数(右边,j)是long类型时,打印正确的值,最后一次打印显示语句k <Integer.MAX_VALUE为false,这就是你的零的原因.:)
i*i*i*i是一个全int乘法,所以结果只是整数(在你的情况下溢出).对于长期结果,您只需要将其中一个转换为long,这样就足够了
long k = ((long)i)*i*i*i;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27568 次 |
| 最近记录: |