如果我有以下代码:
long interval = 0;
interval = ((6000 * 60) * 24) * 30;
它不会运行,因为我需要将每个文字都设为Long。所以这会奏效:
interval = ((6000L * 60L) * 24L) * 30L;
但是如果我试图将char类型中的不同变量相乘呢?说我有:
char a, b, c, d;
我给这些字符中的每个字符赋值,所以我尝试:
interval = a * b * c * d;
如果这个溢出,我不能只放L,因为那会调用不同的变量。
interval = aL * bL * cL * dL;
我已尝试将这些字符中的每一个转换为很长时间,但该产品仍会返回负数。
答案 0 :(得分:3)
您只需将其中一个变量(任何一个)转换为long,以便进行long
乘法运算:
interval = (long)a * b * c * d;
答案 1 :(得分:2)
interval = ((6000L * 60L) * 24L) * 30L;
此代码似乎在计算30天内的毫秒数。
那么,请使用JDK提供的功能:
interval = TimeUnit.DAYS.toMillis(30L);
答案 2 :(得分:1)
将multiplicative operator应用于其操作数时,
对操作数执行二进制数字提升(第5.6.2节)。
就这种情况而言,
否则,如果任一操作数的类型为
long
,则另一个操作数将转换为long
。
所以,真的,你需要的只是在乘法开始时有一个long
值。您可以通过几种方式实现这一目标。 Either use a cast as demonstrated by Eran.或在表达式
long
字面值
char a, b, c, d;
...
interval = 1L * a * b * c * d;
// (......) result is a long value
通过乘法的开头,我指的是乘法运算符是左关联的这一事实。在您的示例中,如果第一次应用*
的结果为long
值,则会传播到下一个*
。