Java的负数乘法

时间:2012-05-09 11:30:28

标签: java multiplication

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

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

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

4 个答案:

答案 0 :(得分:6)

溢出。

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

答案 1 :(得分: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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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