通常大数字变为负数

2022-09-03 10:38:28

自从我开始将eclipse用于欧拉项目以来,我注意到大数字有时会变成一个看似随机的负数。我想这与传递这种类型的花束有关。

如果你能向我解释这些负数是如何产生的,以及它背后的逻辑是什么,我会很高兴。另外,我该如何避免它们(最好不要使用BigInteger类)。丹克!=)


答案 1

此图显示了您要查找的内容。在你的情况下,它显然是更大的数字,但原理保持不变。

java 中的限制示例如下:
int: −2,147,483,648 到 2,147,483,647。
长: -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807


在图像0000,0001等中,显示了数字的二进制表示形式。

Image explaining two's complement

编辑:在欧拉项目中,您经常需要想出一种方法来解决流浪数字。问题被设计成如此大的数字,这样你就不能使用普通的解决问题的方式。但是,如果您发现自己确实需要使用它们,我建议您无论如何都要学习BigInteger。从长远来看,您会发现它很有用,而且并不复杂。这里有一个链接,其中包含许多可以理解的例子:BigInteger示例


答案 2

在数学中,数字是无限的。然而,在计算机中,它们不是。对于每个类类型,都有: , , .例如。当您尝试增加的数目大于此值时,该数字将变为负数。通过这种方式,数字的内部二进制表示形式可以工作。MAX_VALUEintintshortlongInteger.MAX_VALUE

int i = Integer.MAX_VALUE;
i++; // i becomes negative. 

推荐