2

在正常的数学术语中,-1756046391 * -1291488517 将等于 2267913749295792147。

当我在 java 中输入完全相同的等式时,我得到答案:-1756046391 * -1291488517 = 19。

任何人都可以对此有所了解吗?

4

4 回答 4

6

溢出。

查看 Integer.MAX_VALUE。Java 中的 Integer 是 32 位 2s 补码值。您不能超过 MAX_VALUE。

于 2012-05-09T11:32:38.217 回答
5

在处理非常大的数字时,您需要确保您使用的数据类型足够大以存储该数字。在java中,你有这些原始数字类型:

type:                      min:                      max:
byte                       -128                       127
short                    -32768                     32767
int              -2,147,483,648             2,147,483,647
long -9,223,372,036,854,775,808 9,223,372,036,854,775,807

如您所见,您的号码刚好适合long. 但是您一定会对此进行处理,因此您可能应该改用BigInt该类:

http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

于 2012-05-09T11:38:06.033 回答
1

像其他人所说的那样使用 long,或者如果这对您的应用程序来说还不够,请考虑使用BigInteger.

于 2012-05-09T11:33:54.810 回答
0

发布您用来重现此内容的确切代码。

您很可能使用整数。使用 long,因为 2267913749295792147 太大而无法放入 int。

于 2012-05-09T11:32:50.310 回答