将长整型值相乘?

2022-09-02 23:12:44
class Main {  
   public static void main (String[] args){  
     long value = 1024 * 1024 * 1024 * 80;  
     System.out.println(Long.MAX_VALUE);  
     System.out.println(value);  
  }  
}

输出为:

9223372036854775807
0

如果!long value = 1024 * 1024 * 1024 * 80L;


答案 1

在Java中,所有数学运算都是在处理所有当前值所需的最大数据类型中完成的。因此,如果你有int * int,它将始终以整数的形式进行数学运算,但int * long作为long完成。

在本例中,1024*1024*1024*80 作为 Int 完成,该 Int 溢出 int。

“L”当然强制其中一个操作数是Int-64(长整型),因此所有的数学运算都是将值存储为多头,因此不会发生溢出。


答案 2

整数文本是 s。s 溢出。使用后缀。intintL

long value = 1024L * 1024L * 1024L * 80L;

如果数据来自变量,则事先强制转换或分配给多头。

long value = (long)a * (long)b;

long aL = a;
long bL = b;
long value = aL*bL

严格来说,你可以用更少的东西来逃脱,但最好是清楚。

同样不是小写作为后缀可能会被混淆为.l1