我认为很长,而且Long课程或多或少都是一样的。 我看到了link
当我显示Long.MAX_VALUE
时,显示9223372036854775807
。
但当我做1000000*1000000
的倍增时10^12
;它给了溢出。
我使用长数据类型来存储值...并且在调试时它在乘法后具有值-727379968
我在哪里弄错了或者我完全是笨蛋?
for (;;)
ppltn[i] = Integer.parseInt(tk.nextToken());
for (int i = 0; i < noc; i++) //sum is of long type
sum = sum + min * ppltn[i]; //min and ppltn are of integer type
答案 0 :(得分:4)
表达式
1000000 * 1000000;
是整数乘法,因为两个操作数都是整数。因此,您受到整数的最大值的限制。
你需要进行长时间的乘法
1000000L * 1000000 /* L if you want it*/;
其中至少有一个操作数是long
而另一个操作数被提升为long
(如果还没有)。
答案 1 :(得分:2)
在Java中,^
并不意味着“权力”。它是一个按位XOR运算符。
如果没有看到您的代码,很难猜到。
但是我的猜测是你正在做像
这样的事情long l = 1000000 * 10000000;
如果是这样,这就是问题所在。
文字1000000
实际上是int
而不是long
,因此,1000000 * 10000000
正在进行int
乘法并且它会溢出(最大值为int
大概是2,xxx,xxx,xxx)。然后将“溢出”值强制转换为长整数。这会给你带来“奇怪”的结果。