我是java语言的新手,这里我不理解,为什么程序在添加两个全范围整数后返回-2。
class Variables {
public static void main(String[] args) {
int a = 2147483647;
int b = 2147483647;
long c = a + b;
System.out.println( c );
}
}
我正在表达式变量c中的4294967294值,但为什么它返回-2请给我解释一下这个背后的原因
您到达Integer.MAX_VALUE
,因此您将转到-2147483648
,然后再次添加Integer.MAX_VALUE
将导致-2
要获得4294967294
,您需要先将一个值强制转换为long
,然后再进行long
求和,而不是将int
转换为
int a = 2147483647;
System.out.println(a + 1); //-2147483648
int b = 2147483647;
System.out.println(a + b); // -2
long c = a + (long) b; // or ((long) a) + b;
System.out.println(c); //4294967294
添加两个int
的结果是一个int
,当您添加a
和b
时,它当然会溢出。只有这样,它才会升级为long
。
在执行加法之前,您可以通过将其中一个转换为long
来获得预期结果:
long c = ((long) a) + b;